# DATEV Export Source: https://docs.fynn.eu/guide/accounting/datev-export Exportiere Buchungen im DATEV-Format und importiere sie in dein Buchhaltungsprogramm ## Buchungen exportieren Gehe hierzu zu [Buchungen > Exporte](https://app.fynn.eu/accounting/export). Buchungs-Exporte Klicke auf den Button "Buchungen exportieren". Es öffnet sich ein Fenster, in dem du den Export einstellen kannst. * **Berater**, **Mandant**: Die Berater- und Mandantennummer findest du in DATEV. Alternativ kannst du fiktive Nummern verwenden. * **Sachkontenlänge**: Die Sachkontenlänge muss mit der Länge der Sachkonten in deinem Buchhaltungsprogramm übereinstimmen. * **Wirtschaftsjahresbeginn**: Das Datum, an dem das Wirtschaftsjahr beginnt. * **Exportzeitraum**: Wähle den Zeitraum aus, für den du die Buchungen exportieren möchtest. * **Offene Rechnungen und Belege hinzufügen**: Exportiert ebenfalls Buchungen von offenen Rechnungen und Belegen. * **Festgeschriebene Daten hinzufügen**: Exportiert ebenfalls festgeschriebene Buchungen inkl. der Rechnungen und dazugehörigen Belege. Buchungen exportieren Wähle die Option "Dokumente festschreiben", um die Buchungen festzuschreiben. Anschließend sind die Buchungen nicht mehr änderbar und es entstehen Korrekturbuchungen bei Änderungen. Klicke auf den Button "Export starten". Die Buchungen werden nun exportiert und können nach wenigen Sekunden heruntergeladen werden. Bitte schließe in der Zwischenzeit das Fenster nicht. Der Export kann einige Sekunden dauern, abhängig von der Anzahl der Buchungen und der Größe der Dateien. Der Export ist abgeschlossen. Du kannst die heruntergeladenen Dateien in dein Buchhaltungsprogramm importieren. Beim manuellen Export hast du die Möglichkeit, Buchungsdaten (Buchungsstapel und Stammdaten), Belegbilder sowie Informationen im DATEV-kompatiblen Format herunterzuladen und diese dann in die Kanzleisoftware zu übernehmen. ## Buchungen in DATEV importieren Um den Buchungsstapel in **DATEV Unternehmen-Online** zu importieren, befolge folgende Schritte: [https://apps.datev.de/help-center/documents/1005516](https://apps.datev.de/help-center/documents/1005516) Um den Buchungsstapel in **DATEV Kanzlei-Rechnungswesen** zu importieren, befolge folgende Schritte: [https://apps.datev.de/help-center/documents/1034038](https://apps.datev.de/help-center/documents/1034038) ## Buchungsschlüssel Bei Verwendung von DATEV ist es je nach DATEV-Einstellung notwendig, Buchungsschlüssel zu hinterlegen. Diese Buchungsschlüssel werden bei der Erstellung von Buchungen automatisch verwendet. Um ein Buchungsschlüssel für ein Konto zu hinterlegen, füge den Buchungsschlüssel wie folgt zur Konto-Nummer hinzu: `.`. **Beispiel** * Konto-Nummer: 8400 * Buchungsschlüssel: 40 * Ergebnis: 40.8400 ### Steuer-Automatik Für die korrekte Buchung innerhalb von DATEV ist es notwendig, dass Automatikkonten für die Erlöskonten hinterlegt sind. Andernfalls werden die entsprechenden Umsatzsteuer nicht korrekt gebucht. ## DATEVconnect online Für eine automatisierte Übertragung der Buchungen nach DATEV kannst du die DATEVconnect online Integration nutzen. Richte die automatische Synchronisierung mit DATEV Kanzlei-Rechnungswesen ein. # Übersicht Source: https://docs.fynn.eu/guide/accounting/introduction Buchhaltungseinstellungen und Integrationen konfigurieren. ## Buchhaltungseinstellungen Die Einstellungen findest du unter "Einstellungen" > ["Buchhaltung"](https://app.fynn.eu/settings/accounting/cost-centres). ### Buchungskonten In den Buchungskonten kannst du die Konten für deine Buchhaltung konfigurieren. Hier kannst du die Konten für deine Erlöse, Kosten und Umsatzsteuer festlegen. Buchungskonten konfigurieren ### Buchungen In den Buchungen kannst du die Einstellungen für die Buchhaltung konfigurieren. Hier kannst du die Einstellungen für die Buchungspositionen, die passive Rechnungsabgrenzungsposten und Weiteres festlegen. Buchhaltung konfigurieren ## Integrationen Aktuell unterstützt Fynn die Integration mit folgenden Buchhaltungsprogrammen: Die DATEV-Integration ermöglicht es dir, Kundenstämme, Buchungen und Rechnungen aus Fynn in dein DATEV-System zu übertragen. Um eine Integration einzurichten, klicke auf die entsprechende Integration und folge den weiteren Schritten. ## Weitere Funktionen Abrechnungsperioden abschließen und nachträgliche Buchungen verhindern. Exportiere Buchungen im DATEV-Format. Passive Rechnungsabgrenzungsposten automatisch bilden. ## Zusätzliche Rechnungs-Empfänger In den Einstellungen kannst du zusätzliche Rechnungs-Empfänger hinzufügen. Diese erhalten eine Kopie der Rechnung per E-Mail. Die Einstellung findest du unter "Einstellungen" > "Benachrichtigungen" > "Zusätzliche Rechnungs-Empfänger". Zusätzliche Rechnungs-Empfänger # Monatsabschlüsse Source: https://docs.fynn.eu/guide/accounting/period-close Abrechnungsperioden abschließen und nachträgliche Buchungen in abgeschlossenen Monaten verhindern ## Übersicht Mit Monatsabschlüssen kannst du vergangene Abrechnungsperioden sperren, sodass keine nachträglichen Buchungen mehr in abgeschlossenen Monaten erfolgen. Das ist besonders wichtig für die periodengerechte Abgrenzung und eine saubere Buchhaltung. Diese Funktion erfordert die Berechtigung **Monatsabschluss** unter **Einstellungen > Benutzer & Berechtigungen > Rollen**. ## Wie funktioniert der Monatsabschluss? Wenn ein Monat abgeschlossen wird, verhindert Fynn, dass Erlöse nachträglich in diesen Monat gebucht werden. ### Periodengerechte Verbuchung auf Monatsebene Diese Funktion muss für deinen Tenant aktiviert werden. Kontaktiere den Support, um sie freizuschalten. Fynn kann Erlöse automatisch in den **richtigen Monat** verbuchen — auch wenn die Rechnung erst im Folgemonat finalisiert wird. Voraussetzung: Der Vormonat ist noch **offen** (nicht abgeschlossen). Das entspricht dem Grundsatz der Periodenabgrenzung nach §252 Abs. 1 Nr. 5 HGB: Erträge werden der Periode zugeordnet, in der sie wirtschaftlich entstanden sind — unabhängig vom Rechnungsdatum. ``` Beispiel 1 – Leistung komplett im Vormonat: - Leistungszeitraum: 01.03.2026 – 31.03.2026 - Rechnung finalisiert am: 05.04.2026 - März ist offen - Ergebnis: Der Erlös wird im März verbucht (nicht im April) Beispiel 2 – Leistung über Monatsgrenze: - Leistungszeitraum: 15.03.2026 – 15.04.2026 - Rechnung finalisiert am: 15.04.2026 - März ist offen - Ergebnis: Der März-Anteil wird im März verbucht, der April-Anteil im April (anteilig nach 30/360-Konvention) Beispiel 3 – Vormonat abgeschlossen: - Leistungszeitraum: 01.03.2026 – 31.03.2026 - Rechnung finalisiert am: 05.04.2026 - März ist abgeschlossen - Ergebnis: Der Erlös wird im April verbucht (abgeschlossene Perioden werden nicht mehr verändert) ``` Das gilt für alle Belegtypen: Rechnungen, Gutschriften und Stornorechnungen. ### Erlösaufteilung bei Geschäftsjahreswechsel Die monatliche Periodenverbuchung deckt auch den Geschäftsjahreswechsel ab. Wenn ein Leistungszeitraum über das Geschäftsjahresende hinausgeht, teilt Fynn die Buchungen automatisch an der Monatsgrenze auf: ``` Beispiel: - Leistungszeitraum: 01.12.2025 – 31.01.2026 - Rechnung finalisiert am: 20.01.2026 - Dezember 2025 ist offen - Ergebnis: Der Dezember-Anteil wird im Dezember 2025 verbucht, der Januar-Anteil im Januar 2026 ``` Ist der Zielmonat (hier: Dezember 2025) bereits abgeschlossen, wird die Aufteilung übersprungen — der gesamte Erlös wird im Finalisierungsmonat verbucht. ## Monat abschließen Gehe zu **Buchhaltung > Buchungsposten**. In der linken Seitenleiste siehst du den Bereich **Monate** mit einer Übersicht aller verfügbaren Monate. Klicke auf **Monat abschließen**. Es öffnet sich ein Dialog, in dem du den gewünschten Monat auswählen kannst. Monate, die nicht abgeschlossen werden können, sind ausgegraut und zeigen den Grund an. Wähle den Monat aus und bestätige mit **Monat abschließen**. Der Monat wird als abgeschlossen markiert und kann nicht mehr geöffnet werden. ## Regeln für Monatsabschlüsse Beim Abschließen von Monaten gelten folgende Regeln: | Regel | Beschreibung | | --------------------------- | --------------------------------------------------------------------------------------------------------------- | | **Nur vergangene Monate** | Der aktuelle und zukünftige Monate können nicht abgeschlossen werden | | **Sequenzieller Abschluss** | Monate müssen der Reihe nach abgeschlossen werden — März kann nicht vor Januar und Februar abgeschlossen werden | | **Nicht rückgängig** | Ein abgeschlossener Monat kann nicht wieder geöffnet werden | ## Monatsübersicht In der Seitenleiste unter **Monate** siehst du alle Monate gruppiert nach Jahr: * **Abgeschlossen** — Monat ist gesperrt, mit Zeitstempel des Abschlusses * **Offen** — Monat kann noch abgeschlossen werden ## Auswirkungen auf Buchungen Ein Monatsabschluss hat folgende Auswirkungen: ### Was wird verhindert? * **Erlösbuchungen** in abgeschlossene Monate — weder durch periodengerechte Zuordnung noch durch Geschäftsjahreswechsel-Aufteilung * Bei Stornierungen werden zuvor aufgeteilte Buchungen nicht rückwirkend in den abgeschlossenen Monat gebucht ### Was bleibt möglich? * Rechnungen können weiterhin erstellt und finalisiert werden * Zahlungen können weiterhin erfasst werden * Neue Buchungen werden automatisch im nächsten offenen Monat verbucht * Gutschriften und Stornierungen für abgeschlossene Monate werden im aktuellen Monat verbucht (GoBD-konform) Stelle sicher, dass alle Buchungen eines Monats vollständig und korrekt sind, bevor du den Monat abschließt. Der Abschluss kann nicht rückgängig gemacht werden. ## Berechtigung Um Monate abschließen zu können, benötigst du die Berechtigung **Monatsabschluss** (`accounting:close-month`). Diese kann unter **Einstellungen > Benutzer & Berechtigungen > Rollen** zugewiesen werden. Ohne diese Berechtigung ist der Button **Monat abschließen** nicht sichtbar. ## Häufige Fragen Mögliche Gründe: * **Aktueller Monat**: Der aktuelle Monat kann erst nach Ablauf abgeschlossen werden * **Vorherige Monate offen**: Alle vorherigen Monate im selben Jahr müssen zuerst abgeschlossen werden * **Bereits abgeschlossen**: Der Monat wurde bereits abgeschlossen * **Fehlende Berechtigung**: Du benötigst die Berechtigung `accounting:close-month` Rechnungen können weiterhin erstellt werden. Ist die periodengerechte Verbuchung aktiv, wird der Erlös automatisch dem nächsten offenen Monat zugeordnet. Ist der Vormonat abgeschlossen, wird der gesamte Erlös im Finalisierungsmonat verbucht — keine Buchung landet in einem abgeschlossenen Monat. Nein, ein Monatsabschluss ist endgültig. Stelle sicher, dass alle Buchungen korrekt sind, bevor du einen Monat abschließt. Ja, Monate müssen sequenziell abgeschlossen werden. Du kannst nicht direkt zu einem späteren Monat springen, ohne die vorherigen Monate abgeschlossen zu haben. # Rechnungsabgrenzung (PRAP) Source: https://docs.fynn.eu/guide/accounting/prap Passive Rechnungsabgrenzungsposten automatisch bilden und auflösen ## Übersicht Mit Fynn kannst du ganz einfach passive Rechnungsabgrenzungsposten (PRAP) für deine Forderungen anlegen und diese über die Zeit automatisch wieder auflösen. Dies kannst du in dein Einstellungen unter "Buchhaltung" > "Buchungen" > "PRAP Buchungen" aktivieren. ## Wie werden PRAP gebildet? In Fynn erstellen wir passive Rechnungsabgrenzungsposten auf Grundlage des Nettobetrags der Forderungen. Da die Mehrwertsteuer sofort zu zahlen ist, berücksichtigen wir sie nicht im Rahmen der Abgrenzung. Für jede Rechnungsposition, sofern eine Buchung je Rechnungsposition aktiviert ist, erfolgt eine gleichmäßige Verteilung des Nettobetrags über den zugrundeliegenden Leistungszeitraum. Beträge, die sich auf den Monat der Rechnungsstellung beziehen, unterliegen dabei keiner Abgrenzung. ## Wie werden PRAP aufgelöst? Die Auflösung der passiven Rechnungsabgrenzungsposten erfolgt ebenfalls gleichmäßig über den Leistungszeitraum. Dabei wird der Betrag des PRAPs monatlich um den entsprechenden Betrag reduziert. Die Buchungen werden automatisch erstellt und in die Zukunft datiert. Diese können in der Buchungsübersicht eingesehen werden. ## Was passiert bei der Stornierung einer Rechnung? Bei Stornierung einer Rechnung werden die passiven Rechnungsabgrenzungsposten, sowie die Rechnungsbuchung automatisch mit einer Gegenbuchung aufgelöst. ## PRAP Buchungsschlüssel Sofern die passive Rechnungsabgrenzungsposten aktiviert sind, wird für die Buchungen der passive Rechnungsabgrenzungsposten der Buchungsschlüssel `40` verwendet. Somit wird sichergestellt, dass der Vorsteuerabzug korrekt erfolgt. Ist ein abweichender Buchungsschlüssel gewünscht, so ist für das Buchungskonto "Passive Rechnungsabgrenzung" entsprechend mit `.` zu definieren. Weitere Informationen zu Buchungsschlüsseln findest du unter [DATEV Export](/guide/accounting/datev-export#buchungsschluessel). ## PRAP aktivieren Gehe zu [Einstellungen > Buchhaltung > Buchungen](https://app.fynn.eu/settings/accounting/postings) Aktiviere die Option "PRAP Buchungen". Die Buchungen werden nun automatisch erstellt. Stelle sicher, dass die entsprechenden Buchungskonten für die passive Rechnungsabgrenzung konfiguriert sind, bevor du PRAP aktivierst. # Kleinstbetragsdifferenzen automatisch ausbuchen Source: https://docs.fynn.eu/guide/accounting/small-difference-write-off Restbeträge aus Unterzahlungen per Überweisung automatisch ausbuchen, wenn die Differenz einen konfigurierbaren Schwellenwert unterschreitet. ## Übersicht Wenn ein Kunde eine Rechnung per Überweisung leicht unterbezahlt, bleibt häufig ein kleiner offener Restbetrag stehen, der manuell nachbearbeitet werden muss. Mit dieser Einstellung bucht Fynn solche Differenzen automatisch aus, sobald der verbleibende offene Betrag strikt unterhalb eines von dir festgelegten Schwellenwerts liegt. Das Ergebnis: Die Rechnung gilt als vollständig beglichen, der Restbetrag wird ausgebucht, und dein Team muss nicht für jeden Kleinstbetrag manuell eingreifen. Der Kunde wird darüber nicht benachrichtigt. Die Funktion greift ausschließlich bei Zahlungen per Überweisung und nur bei Unterzahlungen. Überzahlungen werden nicht berührt. ## Einstellung konfigurieren Gehe zu [Einstellungen > Buchhaltung > Grundeinstellungen](https://app.fynn.eu/settings/accounting/settings). Aktiviere den Schalter **Kleinstbetragsdifferenzen ausbuchen**. Gib den Schwellenwert in Euro ein. Liegt der offene Restbetrag strikt unterhalb dieses Betrags, löst Fynn die automatische Ausbuchung aus. Ein üblicher Wert liegt zwischen 0,50 € und 2,00 €. Wähle einen Betrag, der für dein Geschäft typische Überweisungsungenauigkeiten abdeckt, ohne echte Unterzahlungen zu verbergen. Die Einstellung gilt sofort für alle ab dann eingehenden Zahlungen. Bereits beglichene oder manuell abgeschlossene Rechnungen sind nicht betroffen. ## Buchungskonten Je nach Steuerfall bucht Fynn die Differenz auf ein eigenes Forderungsverlust-Konto. Der Gegenposten ist jeweils das Debitorenkonto. | Steuerfall | SKR03 | | -------------------------------------------- | ----- | | 19 % Umsatzsteuer | 2406 | | 7 % Umsatzsteuer | 2401 | | Steuerfrei (z.B. EU Reverse Charge, Ausfuhr) | 2400 | Die Konten werden in den Einstellungen angezeigt und lassen sich bei Bedarf über den Kontenrahmen anpassen. ## Was passiert bei einer Ausbuchung? Sobald eine Überweisung eingeht und der Restbetrag die Bedingung erfüllt, läuft folgendes ab: 1. Fynn legt eine Rechnungsanpassung (Bagatelle) an, die den offenen Restbetrag auf null setzt. 2. Für jeden Steuersatz der Rechnung entsteht ein eigener Buchungssatz auf das jeweilige Forderungsverlust-Konto. Der Buchungstext lautet **Automatische Ausbuchung wg. Kleinstbetragsdifferenz**. Gemischte Steuersätze werden dabei vollständig unterstützt. 3. Bei 19 % und 7 % sind die verwendeten Konten DATEV-Automatikkonten: Die Umsatzsteuer wird automatisch berichtigt, ohne separaten Buchungsschlüssel. Für steuerfreie Positionen wird das Sammelkonto ohne Steuerschlüssel bespielt. 4. Die Rechnung ist vollständig beglichen. 5. Der Kunde erhält **keine** E-Mail-Benachrichtigung. ## Häufige Fragen Nein. Kleinstbetragsdifferenzen werden nur bei Überweisungen ausgebucht. Kreditkartenzahlungen, SEPA-Lastschriften und andere Zahlungsarten bleiben unverändert. Genau gleich zählt nicht. Die Ausbuchung greift nur, wenn der Restbetrag **strikt kleiner** als der Schwellenwert ist. Eine Differenz in Höhe des Schwellenwerts bleibt offen. Ja. Fynn erstellt für jeden Steuersatz der Rechnung einen eigenen Buchungssatz auf das jeweilige Forderungsverlust-Konto. Bei 19 % und 7 % erfolgt die Umsatzsteuer-Korrektur automatisch über das DATEV-Automatikkonto, bei steuerfreien Positionen ohne Steuerschlüssel. Gemischte Rechnungen werden vollständig unterstützt. Nein. Bei einer automatischen Ausbuchung wird keine E-Mail an den Kunden gesendet. Die Buchungen tragen den Text **Automatische Ausbuchung wg. Kleinstbetragsdifferenz** und lassen sich so jederzeit in der Buchungsübersicht und im DATEV-Export nachvollziehen. Ja. Der Einrichtungs-Assistent im Steuerberater-Portal enthält im Schritt Buchungslogik dieselbe Einstellung. Änderungen dort wirken sich direkt auf deine Organisation aus. # Steuerberater-Portal Source: https://docs.fynn.eu/guide/accounting/tax-advisor-portal Gib deiner Steuerberatung einen eigenen Zugang zu Belegen, DATEV-Auswertungen und Buchhaltungsdaten, ohne Zugriff auf dein operatives Konto. Deine Steuerberatung arbeitet jetzt in einem eigenen Portal mit den Daten, die sie wirklich braucht: Belege, DATEV-Auswertungen und die relevanten Buchhaltungsdaten. Dein operatives Konto bleibt davon getrennt, deine Steuerberatung sieht keine Vertriebs- oder Produktdaten. ## Zugang einrichten Lade deine Steuerberatung wie einen Benutzer ein und wähle als Ziel das Steuerberater-Portal. Sie erhält daraufhin eine E-Mail mit einem Anmeldelink. Die Anmeldung läuft per Magic-Link, also über den Link aus der E-Mail und ohne eigenes Passwort. Ein neuer Link lässt sich jederzeit anfordern. Beim ersten Login führt ein Assistent durch die Grundeinstellungen der Buchhaltung. Danach steht das Portal bereit. ## Der Einrichtungs-Assistent Der Assistent klärt einmalig die Grundlagen, damit der DATEV-Export von Anfang an zum Kontenrahmen deiner Steuerberatung passt: * **Kontenrahmen**: Auswahl des passenden Kontenrahmens, zum Beispiel SKR03 oder SKR04. * **Nummernkreise**: die Nummernkreise für Debitoren und Sachkonten. * **Kostenstellen**: optionale Kostenstellen für die Zuordnung. * **Wirtschaftsjahr**: Beginn des Wirtschaftsjahrs für die periodengerechte Zuordnung. Die Einstellungen lassen sich später jederzeit anpassen. ## Was deine Steuerberatung sieht * **Belege**: alle Ausgangsbelege mit ihren Referenzen, direkt einsehbar und filterbar. * **DATEV-Auswertungen**: die Buchungsstapel je Zeitraum mit Anzahl, Aufschlüsselung bis auf den einzelnen Beleg und der Möglichkeit, einen Export erneut zu erzeugen. * **Buchhaltungsdaten**: die relevanten Kennzahlen und Auswertungen an einem Ort. Das Steuerberater-Portal wird pro Organisation freigeschaltet. Wenn du es nutzen möchtest, wende dich an den Fynn-Support. Wie der DATEV-Export selbst aufgebaut ist, liest du unter [DATEV-Export](/guide/accounting/datev-export). # Steuerberechnung Source: https://docs.fynn.eu/guide/accounting/tax-calculation Lege fest, ob die Umsatzsteuer auf neuen Belegen horizontal pro Position oder vertikal auf Belegebene berechnet wird ## Übersicht Auf Belegen mit mehreren Positionen entscheidet die Steuerberechnung, an welcher Stelle die Umsatzsteuer kaufmännisch gerundet wird. Das Ergebnis kann sich dadurch um wenige Cent unterscheiden. Du wählst die Methode in den Einstellungen und sie gilt für alle Belege, die du ab dann ausstellst. Die Einstellung findest du unter [Einstellungen > Buchhaltung > Grundeinstellungen](https://app.fynn.eu/settings/accounting/settings). ## Horizontal oder vertikal? Beide Verfahren runden kaufmännisch, nur an unterschiedlicher Stelle: | Methode | So wird gerundet | | ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | | **Horizontal** (pro Position) | Jede Position rundet ihre Steuer einzeln, anschließend werden die gerundeten Beträge summiert. | | **Vertikal** (auf Belegebene) | Die Positionen werden je Steuersatz zusammengefasst, die Steuer wird einmal auf der Summe gerundet und exakt auf die Positionen zurückverteilt. | Das folgende Beispiel zeigt den Unterschied an zehn gleichen Positionen: ``` 10 Positionen zu je 9,99 € mit 19 % Umsatzsteuer Horizontal: 10 × runden(9,99 € × 19 %) = 10 × 1,90 € = 19,00 € Vertikal: runden(99,90 € × 19 %) = runden(18,981 €) = 18,98 € ``` Die zwei Cent Differenz entstehen, weil beim horizontalen Verfahren jede Position für sich aufrundet und sich diese Rundungen aufsummieren. Vertikal ist konform zur E-Rechnung (EN 16931). Der ausgewiesene Steuerbetrag entspricht exakt der Summe der Buchungen, was die Übergabe an die Buchhaltung und an DATEV sauber hält. ## Was die Umstellung bedeutet Die Methode wird beim Erstellen eines Belegs fest hinterlegt und ändert sich danach nicht mehr. Eine Umstellung wirkt deshalb nur in eine Richtung: nach vorne. * Belege, die du **ab der Umstellung** ausstellst, nutzen die neue Methode. * Bereits erstellte Belege, **auch Entwürfe**, behalten ihre bisherige Berechnung. * Gutschriften und Stornorechnungen übernehmen die Methode des ursprünglichen Belegs, damit der Bezug exakt aufgeht. Eine Umstellung verändert keine bestehenden Belege. So bleibt jeder Beleg dauerhaft nachvollziehbar, auch wenn du die Methode später wechselst. ## Steuerberechnung umstellen Gehe zu [Einstellungen > Buchhaltung > Grundeinstellungen](https://app.fynn.eu/settings/accounting/settings). Wähle im Abschnitt **Steuerberechnung** zwischen vertikal und horizontal. Bestätige im Dialog, dass die neue Methode nur für ab dann ausgestellte Belege gilt. Die Umstellung wird sofort übernommen. ## Häufige Fragen Neue Organisationen starten mit der vertikalen Berechnung. Bestehende Organisationen behalten ihre bisherige (horizontale) Methode, bis du sie umstellst. Nein. Jeder Beleg behält die Methode, mit der er erstellt wurde, auch Entwürfe. Nur ab dann neu ausgestellte Belege nutzen die gewählte Methode. Vertikal, wenn du E-Rechnungen nach EN 16931 ausstellst oder den Steuerausweis exakt zu den Buchungen passend halten möchtest. Horizontal bildet das frühere Verhalten ab. # Kundeneinstellungen Source: https://docs.fynn.eu/guide/ai-assistant/customer-settings Kundeneinstellungen per KI-Assistent abfragen und ändern – Mahnwesen, Abrechnung, Rechnungsfreigabe und Zahlungsziel. Der KI-Assistent kann **Kundeneinstellungen anzeigen** und **per Bulk-Aktion ändern** – direkt im Chat, ohne die Einstellungsseite jedes Kunden einzeln aufrufen zu müssen. Unterstützt werden: * **Mahnwesen** (Dunning) – deaktivieren / aktivieren * **Abrechnung** (Billing) – deaktivieren / aktivieren * **Manuelle Rechnungsfreigabe** – aktivieren / deaktivieren * **Zahlungsziel** – auf einen neuen Wert setzen *** ## Einstellungen abfragen Frage den Assistenten nach dem aktuellen Status der Kundeneinstellungen. Er ruft die Daten automatisch ab und fasst sie zusammen. ### Beispiel-Anfragen | Anfrage | Was passiert | | ---------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | | "Ist das Mahnwesen für Kunde Müller aktiv?" | Ruft die Einstellungen von Kunde Müller ab und zeigt den Dunning-Status | | "Welche Einstellungen hat Kunde D26-00100043?" | Zeigt alle Einstellungen des Kunden (Mahnwesen, Abrechnung, Rechnungsfreigabe, Zahlungsziel, E-Rechnung) | | "Ist die Abrechnung für diesen Kunden aktiv?" | Auf der Kundendetailseite – nutzt den Seitenkontext | | "Hat Kunde ACME die manuelle Rechnungsfreigabe aktiviert?" | Prüft den Status der manuellen Freigabe | ### Ablauf Der Assistent sucht den Kunden per Name, Kundennummer oder nutzt den Seitenkontext. Bei mehreren Treffern wird eine **Auswahlkarte** angezeigt. Alle Kundeneinstellungen werden auf einen Blick abgerufen: Mahnwesen, Abrechnung, Rechnungsfreigabe, Zahlungsziel und E-Rechnungsformat. Der Assistent beantwortet deine Frage und bietet proaktiv an, die Einstellung zu ändern – z.B. *"Das Mahnwesen ist aktiv. Soll ich es deaktivieren?"* Die Einstellungsabfrage funktioniert auch im Seitenkontext. Auf einer **Kundendetailseite** reicht "Welche Einstellungen hat dieser Kunde?" – der Assistent weiß, welcher Kunde gemeint ist. *** ## Einstellungen ändern Alle Änderungen an Kundeneinstellungen folgen dem gleichen **Bestätigungs-Workflow**: Der Assistent zeigt eine Bestätigungskarte an, und du bestätigst oder brichst ab. Bei mehreren Kunden wird die Änderung **sequenziell** für jeden Kunden einzeln durchgeführt. Einstellungsänderungen werden **nur nach expliziter Bestätigung** über den Button ausgeführt. Ein einfaches "Ja" im Chat reicht nicht aus. *** ### Mahnwesen deaktivieren / aktivieren Deaktiviere oder aktiviere das Mahnwesen (Dunning) für einen oder mehrere Kunden gleichzeitig. Wenn das Mahnwesen deaktiviert ist, werden keine automatischen Mahnungen mehr für den Kunden erstellt. #### Beispiel-Anfragen | Anfrage | Was passiert | | ------------------------------------------------- | --------------------------------------------------------- | | "Deaktiviere das Mahnwesen für Kunde Müller" | Deaktiviert das Mahnwesen für einen Kunden | | "Pausiere die Mahnung für Kunden A und B" | Deaktiviert das Mahnwesen für mehrere Kunden gleichzeitig | | "Aktiviere das Mahnwesen für Kunde Müller wieder" | Reaktiviert das Mahnwesen | #### Ablauf Der Assistent sucht die genannten Kunden. Bei mehreren Treffern pro Name wird eine Auswahlkarte angezeigt. Eine **Bestätigungskarte** zeigt die betroffenen Kunden und die geplante Aktion (z.B. "Mahnwesen für 2 Kunden deaktivieren"). Du bestätigst oder brichst ab. Nach der Bestätigung wird die Einstellung für jeden Kunden einzeln aktualisiert. Der Assistent zeigt eine Zusammenfassung mit Erfolgs- oder Fehlerstatus pro Kunde. *** ### Abrechnung deaktivieren / aktivieren Deaktiviere oder aktiviere die automatische Abrechnung (Billing) für einen oder mehrere Kunden. Wenn die Abrechnung deaktiviert ist, werden keine neuen Rechnungen für den Kunden generiert. #### Beispiel-Anfragen | Anfrage | Was passiert | | --------------------------------------------------- | --------------------------------------------- | | "Deaktiviere die Abrechnung für Kunde ACME GmbH" | Deaktiviert die Abrechnung für einen Kunden | | "Stoppe die Rechnungserstellung für Kunden A und B" | Deaktiviert die Abrechnung für mehrere Kunden | | "Aktiviere die Abrechnung für Kunde ACME wieder" | Reaktiviert die Abrechnung | #### Ablauf Der Assistent sucht die genannten Kunden. Bei mehreren Treffern pro Name wird eine Auswahlkarte angezeigt. Eine **Bestätigungskarte** zeigt die betroffenen Kunden und die geplante Aktion (z.B. "Abrechnung für 1 Kunden deaktivieren"). Du bestätigst oder brichst ab. Nach der Bestätigung wird die Einstellung für jeden Kunden einzeln aktualisiert. Der Assistent zeigt eine Zusammenfassung mit Erfolgs- oder Fehlerstatus pro Kunde. *** ### Manuelle Rechnungsfreigabe aktivieren / deaktivieren Aktiviere oder deaktiviere die manuelle Rechnungsfreigabe für einen oder mehrere Kunden. Wenn die manuelle Freigabe aktiviert ist, müssen Rechnungen für diesen Kunden vor dem Versand manuell geprüft und freigegeben werden. #### Beispiel-Anfragen | Anfrage | Was passiert | | ----------------------------------------------------------- | ----------------------------------------- | | "Aktiviere die manuelle Rechnungsfreigabe für Kunde Müller" | Schaltet die manuelle Freigabe ein | | "Schalte die manuelle Freigabe für Kunden A und B ein" | Aktiviert die Freigabe für mehrere Kunden | | "Deaktiviere die Rechnungsfreigabe für Kunde Müller" | Schaltet zurück auf automatische Freigabe | #### Ablauf Der Assistent sucht die genannten Kunden. Bei mehreren Treffern pro Name wird eine Auswahlkarte angezeigt. Eine **Bestätigungskarte** zeigt die betroffenen Kunden und die geplante Aktion (z.B. "Manuelle Rechnungsfreigabe für 2 Kunden aktivieren"). Du bestätigst oder brichst ab. Nach der Bestätigung wird die Einstellung für jeden Kunden einzeln aktualisiert. Der Assistent zeigt eine Zusammenfassung mit Erfolgs- oder Fehlerstatus pro Kunde. *** ### Zahlungsziel ändern Ändere das Zahlungsziel (payableInDays) für einen oder mehrere Kunden gleichzeitig. Der Wert bestimmt, wie viele Tage nach Rechnungsstellung die Zahlung fällig ist. #### Beispiel-Anfragen | Anfrage | Was passiert | | ---------------------------------------------------------- | ------------------------------------------------------- | | "Setze das Zahlungsziel für Kunde Müller auf 30 Tage" | Ändert das Zahlungsziel auf 30 Tage | | "Passe das Zahlungsziel von Kunden A und B auf 14 Tage an" | Ändert das Zahlungsziel für mehrere Kunden gleichzeitig | | "Zahlungsfrist für alle Kunden auf 60 Tage" | Der Assistent sucht die Kunden und ändert die Frist | #### Ablauf Der Assistent sucht die genannten Kunden und ermittelt die gewünschte Zahlungsfrist. Falls der Wert nicht angegeben wurde, fragt er gezielt nach. Eine **Bestätigungskarte** zeigt die betroffenen Kunden und das neue Zahlungsziel. Du bestätigst oder brichst ab. Nach der Bestätigung wird das Zahlungsziel für jeden Kunden einzeln aktualisiert. Der Assistent zeigt eine Zusammenfassung mit Erfolgs- oder Fehlerstatus pro Kunde. Gültiger Bereich für das Zahlungsziel: **1 bis 365 Tage**. *** ## Bestätigungskarte Alle Einstellungsänderungen zeigen eine Bestätigungskarte im Chat an: Klicke auf **Bestätigen**, um die Änderung auszuführen. Die Buttons werden nach dem Klick deaktiviert. Bei mehreren Kunden siehst du einen Fortschritt, bis alle Änderungen abgeschlossen sind. Klicke auf **Abbrechen**, um den Vorgang abzubrechen. Der Assistent bestätigt die Stornierung und du kannst eine neue Anfrage stellen. Die Bestätigung hat ein Zeitfenster von **5 Minuten**. Danach wird sie ungültig und der Assistent bittet dich, den Vorgang erneut zu starten. Während die Bestätigungskarte angezeigt wird, ist das Chat-Eingabefeld deaktiviert. Du musst zuerst bestätigen oder abbrechen, bevor du eine neue Nachricht senden kannst. *** ## Beispiel-Szenarien ### Einstellung abfragen und ändern > **Du:** Ist das Mahnwesen für Kunde Müller aktiv? > > **Assistent:** Das Mahnwesen für Müller GmbH ist aktuell **aktiv**. Die Mahngebühren sind ebenfalls aktiviert und das Zahlungsziel beträgt 14 Tage. Soll ich das Mahnwesen deaktivieren? > > **Du:** Ja, deaktiviere es > > *(Bestätigungskarte: "Mahnwesen für 1 Kunden deaktivieren" – Müller GmbH)* > > **Du:** *(klickt "Bestätigen")* > > **Assistent:** Das Mahnwesen für Müller GmbH wurde deaktiviert. ### Bulk-Änderung für mehrere Kunden > **Du:** Deaktiviere die Abrechnung für Kunden Müller und Schmidt > > **Assistent:** *(sucht Kunden, findet eindeutige Treffer)* > > *(Bestätigungskarte: "Abrechnung für 2 Kunden deaktivieren" – Müller GmbH, Schmidt AG)* > > **Du:** *(klickt "Bestätigen")* > > **Assistent:** ✓ Abrechnung für Müller GmbH deaktiviert. > ✓ Abrechnung für Schmidt AG deaktiviert. > Beide Einstellungen wurden erfolgreich aktualisiert. ### Abbruch einer Änderung > **Du:** Aktiviere die manuelle Rechnungsfreigabe für Kunde ACME > > *(Bestätigungskarte: "Manuelle Rechnungsfreigabe für 1 Kunden aktivieren" – ACME GmbH)* > > **Du:** *(klickt "Abbrechen")* > > **Assistent:** Der Vorgang wurde abgebrochen. Die Einstellungen wurden nicht geändert. *** ## Häufige Fragen Aktuell: Mahnwesen (aktivieren/deaktivieren), Abrechnung (aktivieren/deaktivieren), manuelle Rechnungsfreigabe (aktivieren/deaktivieren) und Zahlungsziel (Anzahl Tage). Weitere Einstellungen werden nach und nach ergänzt. Ja – nenne einfach mehrere Kundennamen oder -nummern in deiner Anfrage. Der Assistent verarbeitet sie sequenziell und zeigt eine Zusammenfassung. Der Assistent verarbeitet jeden Kunden einzeln. Wenn bei einem Kunden ein Fehler auftritt, werden die anderen trotzdem aktualisiert. Am Ende siehst du eine Zusammenfassung mit Erfolgs- und Fehlerstatus pro Kunde. Ja – frage einfach "Welche Einstellungen hat Kunde X?" oder "Ist das Mahnwesen für Kunde X aktiv?". Der Assistent zeigt dir den aktuellen Status an und bietet an, ihn zu ändern. # KI-Assistent Source: https://docs.fynn.eu/guide/ai-assistant/introduction Nutze den integrierten KI-Assistenten, um schnell Informationen zu finden, Daten abzufragen und durch die Plattform zu navigieren. Der KI-Assistent in Fynn hilft dir, schnell Antworten auf Fragen zu deinen Kunden, Belegen, Zahlungen und Abonnements zu finden – direkt in der App, ohne manuelles Suchen und Filtern. ## Assistent öffnen Klicke auf das **Chat-Symbol** unten rechts in der App oder nutze den Tastaturkürzel, um den Assistenten zu öffnen. Der Assistent erkennt automatisch, auf welcher Seite du dich befindest. Wenn du z.B. auf einer Kundendetailseite bist, bezieht er Fragen direkt auf diesen Kunden. ## Was kann der Assistent? Suche nach Kunden, Belegen, Abonnements, Zahlungen und mehr – in natürlicher Sprache. Kundeneinstellungen abfragen und ändern – Mahnwesen, Abrechnung, Rechnungsfreigabe und Zahlungsziel. Öffne Seiten, Detailansichten oder Erstellungsdialoge per Sprachbefehl. Lass dir Berichte generieren und per E-Mail zusenden. Stelle Fragen zur Plattform und erhalte Antworten aus der Dokumentation. *** ## Beispiel-Anfragen Hier findest du typische Fragen, die du dem Assistenten stellen kannst, gruppiert nach Anwendungsfall. ### Kunden finden | Anfrage | Was passiert | | --------------------------------------------- | ------------------------------------------------- | | "Suche Kunde Müller" | Findet alle Kunden mit dem Namen Müller | | "Zeige mir die E-Mail von Kunde D26-00100043" | Ruft die Kundendetails anhand der Kundennummer ab | | "Wie viele aktive Kunden haben wir?" | Zählt aktive Kunden über das Gesamtergebnis | ### Belege & Rechnungen | Anfrage | Was passiert | | ------------------------------------------- | ----------------------------------------------- | | "Offene Rechnungen" | Listet unbezahlte Belege | | "Überfällige Belege von Kunde Müller" | Zeigt Mahnübersicht für einen bestimmten Kunden | | "Zeige Belege aus dem letzten Monat" | Filtert Belege nach Finalisierungsdatum | | "Was ist der Status von Beleg RE-2024-001?" | Ruft Belegdetails ab | ### Zahlungen & Transaktionen | Anfrage | Was passiert | | ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | "Wann hat der Kunde zuletzt bezahlt?" | **Letzte-Zahlung-Workflow**: Sucht die letzte Zahlungstransaktion des Kunden und zeigt Status, Zahlungsmethode, Gateway, Betrag, Datum und verknüpften Beleg. Bei fehlgeschlagenen Zahlungen wird zusätzlich die letzte erfolgreiche Zahlung angezeigt. | | "Was ist die letzte Zahlung von D26-00100030?" | Wie oben – der Kunde wird zuerst per Kundennummer aufgelöst | | "Wie wurde Beleg RE-2024-001 bezahlt?" | **Belegzahlungen-Workflow**: Listet alle Transaktionen zu einem Beleg | | "Welche Zahlungen gibt es zu diesem Beleg?" | Zeigt Transaktionen zum aktuellen Beleg (auf der Belegdetailseite) | | "Zeige fehlgeschlagene Zahlungen" | Filtert Transaktionen nach Status | **Transaktions-Karten** zeigen dir auf einen Blick: Zahlungsanbieter (z.B. Stripe, GoCardless), Status (Erfasst, Ausstehend, Fehlgeschlagen), Betrag, Datum und verknüpften Beleg. Du kannst auf eine Transaktion klicken, um direkt zum Beleg zu springen. Mehr Details zu den Zahlungs-Workflows findest du unter [Workflows](/guide/ai-assistant/workflows). ### Kundeneinstellungen | Anfrage | Was passiert | | ------------------------------------------------------------- | --------------------------------------------------------------------------------- | | "Ist das Mahnwesen für Kunde Müller aktiv?" | Ruft die Einstellungen ab und zeigt den Dunning-Status | | "Welche Einstellungen hat Kunde D26-00100043?" | Zeigt alle Einstellungen (Mahnwesen, Abrechnung, Rechnungsfreigabe, Zahlungsziel) | | "Deaktiviere das Mahnwesen für Kunde Müller" | Zeigt eine Bestätigungskarte und deaktiviert nach Bestätigung | | "Aktiviere die manuelle Rechnungsfreigabe für Kunden A und B" | Ändert die Einstellung für mehrere Kunden gleichzeitig | | "Setze das Zahlungsziel für Kunde Müller auf 30 Tage" | Ändert das Zahlungsziel nach Bestätigung | Details zu allen unterstützten Einstellungsänderungen findest du unter [Kundeneinstellungen](/guide/ai-assistant/customer-settings). ### Abonnements | Anfrage | Was passiert | | ------------------------------------------ | ------------------------------------ | | "Aktive Abonnements von Kunde Müller" | Filtert Abos nach Kunde und Status | | "Welche Testphasen laufen diese Woche ab?" | Nutzt den Filter `trialEndsBefore` | | "Abos die in 30 Tagen enden" | Nutzt den Filter `contractEndBefore` | ### Navigation | Anfrage | Was passiert | | ----------------------------- | --------------------------------------------------------------------- | | "Öffne Kunde Müller" | Navigiert zur Kundendetailseite (bei Mehrdeutigkeit wird nachgefragt) | | "Neuen Kunden anlegen" | Öffnet den Erstellungsdialog | | "Gehe zu Einstellungen" | Navigiert zur Einstellungsseite | | "Öffne Transaktionsübersicht" | Navigiert zu `/finance/transactions` | ### Berichte | Anfrage | Was passiert | | ---------------------------------------- | --------------------------------------------------------------------------------------------- | | "Erstelle einen Umsatz-Bericht für 2025" | Schlägt den Bericht vor, erfasst Parameter automatisch und zeigt eine Bestätigungskarte | | "Ich brauche eine Offene-Posten-Liste" | Generiert den OPOS-Bericht (keine Parameter nötig – direkte Bestätigung) | | "Zahlungsbericht für Januar 2026" | Erstellt einen Zahlungsbericht, fragt gezielt nach fehlenden Parametern (z.B. Zahlungsstatus) | | "PRAP-Bericht bis Ende 2025" | Erstellt den PRAP-Bericht mit Stichtag 31.12.2025 | | "Exportiere die re:cap-Berichte" | Generiert die re:cap-Berichte (keine Parameter nötig) | Berichte werden erst nach deiner expliziten Bestätigung über den **Bestätigen-Button** generiert. Ein einfaches "Ja" im Chat reicht nicht aus. Details zum vollständigen Ablauf mit Parametererfassung, Validierung und Bestätigung findest du unter [Berichterstellung](/guide/ai-assistant/reports). ### Dokumentation & Hilfe | Anfrage | Was passiert | | ------------------------------------ | -------------------------------------------------------------------- | | "Wie erstelle ich eine Rechnung?" | Sucht in der Dokumentation und gibt eine Schritt-für-Schritt-Antwort | | "Was bedeutet Mahnstufe?" | Erklärt den Begriff aus der Dokumentation | | "Wie funktioniert SEPA-Lastschrift?" | Liefert eine Erklärung zur Zahlungsmethode | *** ## Seitenkontext Der Assistent erkennt, auf welcher Seite du dich befindest, und bezieht seine Antworten darauf: | Seite | Verhalten | | --------------------------------- | ----------------------------------------------------------------------------------------------------- | | **Kundendetail** | Fragen beziehen sich automatisch auf diesen Kunden. "Offene Belege" → zeigt nur Belege dieses Kunden. | | **Belegdetail** | "Wie wurde dieser Beleg bezahlt?" → zeigt Transaktionen zu genau diesem Beleg. | | **Abo-Detail** | Fragen beziehen sich auf dieses Abonnement und den zugehörigen Kunden. | | **Listen** (Kunden, Belege, Abos) | Fragen beziehen sich auf die jeweilige Entität allgemein. | | **Dashboard** | Kein spezieller Kontext – der Assistent fragt bei Bedarf nach. | Du kannst den Seitenkontext jederzeit übersteuern. Auch auf einer Kundendetailseite kannst du fragen: "Zeige mir alle überfälligen Belege" – der Assistent erkennt, dass du eine allgemeine Abfrage meinst. *** ## Mehrdeutige Ergebnisse Wenn der Assistent bei einer Suche mehrere passende Ergebnisse findet (z.B. mehrere Kunden mit dem Namen "Müller"), zeigt er dir **klickbare Auswahloptionen** an, anstatt einfach eines auszuwählen. Du fragst z.B. "Wann hat Kunde Müller zuletzt bezahlt?" Der Assistent findet 3 Kunden mit dem Namen Müller und zeigt dir Karten mit Name, Kundennummer und E-Mail. Du klickst auf den richtigen Kunden – der Assistent setzt den Workflow automatisch fort. *** ## Tipps für bessere Ergebnisse Je genauer deine Frage, desto besser das Ergebnis. "Offene Belege von Kunde D26-00100043" ist besser als "Offene Rechnungen". Auf einer Kundendetailseite reicht "Letzte Zahlung?" – der Assistent weiß, welcher Kunde gemeint ist. Bei häufigen Namen (z.B. "Müller") ist die Kundennummer eindeutiger und vermeidet Rückfragen. Für Dinge wie "Umsatzentwicklung der Top-10-Kunden" ist ein Bericht besser geeignet als eine Chat-Antwort. Der Assistent schlägt das automatisch vor. # Berichterstellung Source: https://docs.fynn.eu/guide/ai-assistant/reports So generierst du mit dem KI-Assistenten Berichte – inklusive automatischer Parametererfassung und Bestätigung. Der KI-Assistent kann Berichte generieren und dir per E-Mail zusenden. Der gesamte Ablauf – vom Vorschlag über die Parametererfassung bis zur Bestätigung – läuft direkt im Chat ab. *** ## Verfügbare Berichte | Bericht | Beschreibung | Parameter | | ------------------------------------ | ----------------------------------------------------------- | ------------------------------------------------ | | **Umsatz-Bericht** | Monatliche Umsatzentwicklung nach Kunden | Jahr (z.B. 2025) | | **Umsatz-Bericht (periodengerecht)** | Umsätze nach Leistungszeitraum, Beleg und kundenbasiert | Jahr (z.B. 2025) | | **Zahlungsbericht** | Übersicht aller Zahlungen inkl. Kunden und Belege | Startdatum, Enddatum, Zahlungsstatus | | **Debitoren-Saldenliste** | Aktuelles Saldo des Debitoren-Kontos | Keine | | **Offene Posten (OPOS)** | Alle unbezahlten Rechnungen inkl. Fälligkeit und Mahnstatus | Keine | | **Belegbericht** | Übersicht aller Belege (filterbar nach Typ) | Belegart (optional), Nur finalisierte (optional) | | **Accounted-MRR-Bericht** | Entwicklung des monatlich wiederkehrenden Umsatzes | Stichtag (optional) | | **Rechnungsprognose** | Zukünftige Rechnungen basierend auf bestehenden Abos | Prognosejahr | | **PRAP-Bericht** | Periodengerechte Abgrenzung aller Umsätze auf Monatsbasis | Stichtag (ISO-Datum) | | **re:cap-Berichte** | Verträge und Rechnungen als CSV-Export für re:cap | Keine | *** ## Ablauf Der Assistent führt dich in mehreren Schritten durch die Berichterstellung: Du stellst eine Frage oder bittest um einen Bericht. Der Assistent erkennt, welcher Bericht zu deiner Anfrage passt, und erklärt dir, was der Bericht enthält. **Beispiele:** * "Erstelle einen Umsatz-Bericht" * "Ich brauche eine Offene-Posten-Liste" * "Wie ist die Umsatzentwicklung unserer besten Kunden?" Wenn der Bericht Parameter benötigt (z.B. ein Jahr oder ein Datumsbereich), erfragt der Assistent diese gezielt. Die Parameter werden **automatisch aus deinen Antworten extrahiert** und **serverseitig validiert** – du musst kein bestimmtes Format einhalten. **Beispiel-Dialog:** > **Du:** Erstelle einen Umsatz-Bericht > > **Assistent:** Für welches Jahr soll der Umsatz-Bericht erstellt werden? > > **Du:** 2025 > > **Assistent:** *(Parameter erkannt und validiert – weiter zur Bestätigung)* Berichte ohne Parameter (z.B. Debitoren-Saldenliste, OPOS) überspringen diesen Schritt und gehen direkt zur Bestätigung. Sobald alle Parameter vorliegen, zeigt der Assistent eine **Bestätigungskarte** im Chat an. Diese enthält: * Den Berichtsnamen * Die erfassten Parameter als Übersicht * Zwei Buttons: **Bestätigen** und **Abbrechen** Du kannst die Parameter prüfen, bevor du den Bericht tatsächlich auslöst. Berichte werden **nur nach expliziter Bestätigung** über den Button generiert. Ein einfaches "Ja" im Chat löst keine Generierung aus. Nach dem Klick auf **Bestätigen** wird der Bericht im Hintergrund erstellt und dir per E-Mail zugestellt. Der Assistent bestätigt dies im Chat. *** ## Parametervalidierung Die Parameter werden **automatisch** vom System geprüft – nicht vom KI-Modell. Das stellt sicher, dass: * Alle Pflichtparameter vorhanden sind, bevor ein Bericht generiert wird * Werte im richtigen Format vorliegen (z.B. 4-stelliges Jahr, gültiges ISO-Datum) * Bei fehlenden oder ungültigen Parametern eine **gezielte Rückfrage** gestellt wird | Parameter | Validierung | | ------------------- | ----------------------------------------------------------- | | **Jahr** | Muss 4-stellige Zahl sein (z.B. 2025), nicht in der Zukunft | | **Datum** | Muss gültiges ISO-8601-Format sein (YYYY-MM-DD) | | **Zahlungsstatus** | Muss `paid`, `pending`, `failed` oder `all` sein | | **Prognosejahr** | Muss 4-stellige Zahl sein, mindestens aktuelles Jahr | | **Stichtag (PRAP)** | Muss gültiges ISO-8601-Format sein (YYYY-MM-DD) | Du kannst Parameter in natürlicher Sprache angeben. Sag einfach "letztes Jahr" oder "Januar 2026" – der Assistent rechnet das automatisch um. *** ## Bestätigungskarte Die Bestätigungskarte erscheint direkt im Chat und verhindert versehentliche Berichterstellung: Klicke auf **Bestätigen**, um den Bericht zu generieren. Die Buttons werden nach dem Klick deaktiviert – ein doppeltes Absenden ist nicht möglich. Nach der Bestätigung zeigt der Assistent eine Ladeansicht mit dem Berichtsnamen. Der Bericht wird per E-Mail zugestellt. Klicke auf **Abbrechen**, um den Vorgang abzubrechen. Der Assistent bestätigt die Stornierung und du kannst eine neue Anfrage stellen oder Parameter ändern. Die Bestätigung hat ein Zeitfenster von **5 Minuten**. Wenn du nicht innerhalb dieser Zeit reagierst, wird die Bestätigung ungültig und der Assistent bittet dich, den Vorgang erneut zu starten. Während die Bestätigungskarte angezeigt wird, ist das Chat-Eingabefeld deaktiviert. Du musst zuerst bestätigen oder abbrechen, bevor du eine neue Nachricht senden kannst. *** ## Beispiel-Szenarien ### Bericht ohne Parameter (OPOS) > **Du:** Erstelle mir einen OPOS-Bericht > > **Assistent:** Ich kann dir einen OPOS-Bericht (Offene Posten) erstellen. Dieser enthält alle unbezahlten Rechnungen mit Fälligkeitsdaten und Mahnstatus. > > *(Bestätigungskarte mit "OPOS-Bericht (Offene Posten)" wird angezeigt)* > > **Du:** *(klickt "Bestätigen")* > > **Assistent:** Der OPOS-Bericht wird erstellt und dir per E-Mail zugesendet. ### Bericht mit Parametern (Umsatz) > **Du:** Wie ist die Umsatzentwicklung unserer besten Kunden? > > **Assistent:** Für eine detaillierte Auswertung kann ich dir einen Umsatz-Bericht generieren. Dieser zeigt die monatliche Umsatzentwicklung nach Kunden. Für welches Jahr soll der Bericht erstellt werden? > > **Du:** 2025 > > *(Bestätigungskarte mit "Umsatz-Bericht", Parameter "Jahr: 2025" wird angezeigt)* > > **Du:** *(klickt "Bestätigen")* > > **Assistent:** Der Umsatz-Bericht für 2025 wird erstellt und dir per E-Mail zugesendet. ### Bericht mit mehreren Parametern (Zahlungen) > **Du:** Ich brauche einen Zahlungsbericht für Q1 2026 > > **Assistent:** Für den Zahlungsbericht brauche ich noch den Zahlungsstatus. Soll der Bericht alle Zahlungen (paid, pending, failed) enthalten, oder nur einen bestimmten Status? > > **Du:** Alle > > *(Bestätigungskarte mit "Zahlungsbericht", Parameter "01.01.2026 – 31.03.2026, Status: all" wird angezeigt)* > > **Du:** *(klickt "Bestätigen")* > > **Assistent:** Der Zahlungsbericht wird erstellt und dir per E-Mail zugesendet. ### PRAP-Bericht mit Stichtag > **Du:** Erstelle einen PRAP-Bericht > > **Assistent:** Ich kann dir einen PRAP-Bericht erstellen. Dieser zeigt die periodengerechte Abgrenzung aller Umsätze auf Monatsbasis. Bis zu welchem Stichtag sollen die Belege berücksichtigt werden? > > **Du:** Bis Ende 2025 > > *(Bestätigungskarte mit "PRAP-Bericht", Parameter "Stichtag: 2025-12-31" wird angezeigt)* > > **Du:** *(klickt "Bestätigen")* > > **Assistent:** Der PRAP-Bericht wird erstellt und dir per E-Mail zugesendet. ### re:cap-Berichte (ohne Parameter) > **Du:** Exportiere die re:cap-Berichte > > **Assistent:** Ich erstelle dir die re:cap-Berichte. Diese enthalten Verträge und Rechnungen als CSV-Export. > > *(Bestätigungskarte mit "re:cap-Berichte" wird angezeigt)* > > **Du:** *(klickt "Bestätigen")* > > **Assistent:** Die re:cap-Berichte werden erstellt und dir per E-Mail zugesendet. ### Ungültige Parameter > **Du:** Erstelle einen Umsatz-Bericht für 999 > > **Assistent:** Das Jahr muss eine 4-stellige Zahl sein (z.B. 2025) und darf nicht in der Zukunft liegen. Für welches Jahr soll der Bericht erstellt werden? > > **Du:** 2025 > > *(Bestätigungskarte wird angezeigt)* *** ## Häufige Fragen Berichte werden per E-Mail an deine hinterlegte Adresse gesendet. Zusätzlich findest du sie unter **Reportings → Generierte Berichte** in der App. Nein – sobald du bestätigt hast, wird der Bericht im Hintergrund erstellt. Du kannst aber jederzeit einen neuen Bericht mit anderen Parametern anfordern. Der Assistent extrahiert Parameter automatisch aus dem gesamten Gesprächsverlauf. Wenn ein Parameter nicht erkannt wurde, war er möglicherweise mehrdeutig. Formuliere ihn etwas spezifischer (z.B. "Jahr 2025" statt nur "letztes Jahr"). Berichte erfordern eine explizite Bestätigung über den **Bestätigen-Button** in der Karte. Das verhindert Missverständnisse und versehentliche Berichtserstellung. Ein einfaches "Ja" im Chat wird als neue Nachricht interpretiert. # Workflows Source: https://docs.fynn.eu/guide/ai-assistant/workflows So verarbeitet der KI-Assistent komplexe Anfragen Schritt für Schritt – am Beispiel von Zahlungen, Transaktionen und Belegen. Der KI-Assistent nutzt für bestimmte Fragestellungen fest definierte **Workflows** – mehrstufige Abläufe, die im Code verankert sind und automatisch die richtigen Daten in der richtigen Reihenfolge abrufen. Du stellst eine Frage, und der Assistent liefert ein vollständiges Ergebnis. *** ## Letzte Zahlung eines Kunden Wenn du fragst, wann ein Kunde zuletzt bezahlt hat, nutzt der Assistent den **Letzte-Zahlung-Workflow**. Dieser sucht direkt nach der letzten Zahlungstransaktion – nicht nach Belegen. Der Workflow sucht immer zuerst die **Transaktion** (die tatsächliche Zahlung), nicht den Beleg. Die Beleginformationen werden automatisch aus der Transaktion abgeleitet. ### Beispiel-Anfragen | Anfrage | Kontext | | ---------------------------------------------- | ------------------------------------------------------ | | "Was ist die letzte Zahlung von D26-00100030?" | Von jeder Seite aus | | "Wann hat der Kunde zuletzt bezahlt?" | Auf der Kundendetailseite | | "Letzte Zahlung?" | Auf der Kundendetailseite (Seitenkontext wird genutzt) | | "Wann hat Kunde Müller zuletzt bezahlt?" | Von jeder Seite aus (Kunde wird per Name gesucht) | ### Ablauf Der Assistent ermittelt den Kunden. Auf einer **Kundendetailseite** wird der Seitenkontext verwendet – keine zusätzliche Suche nötig. Von anderen Seiten aus sucht er per Kundennummer oder Name. Bei mehreren Treffern zeigt er eine **Auswahlkarte** an. Der Assistent ruft die **letzte Zahlungstransaktion** des Kunden ab. Das Ergebnis enthält: Status, Zahlungsmethode, Gateway (z.B. Stripe, SEPA), Betrag, Datum und den verknüpften Beleg. Das Ergebnis wird als Transaktionskarte angezeigt – mit direkten Links zum Beleg und zur Transaktionsübersicht. ### Szenarien Die letzte Transaktion hat den Status **Erfasst** (captured) oder **Gebucht** (booked). Der Assistent zeigt: * Zahlungsdatum und Betrag * Zahlungsmethode und Gateway (z.B. "SEPA-Lastschrift via GoCardless") * Verknüpfter Beleg (z.B. "RE-2025-0042") **Beispiel-Antwort:** > "Die letzte Zahlung von Kevin Szymura war am 03.02.2026 über 149,90 € per SEPA-Lastschrift (GoCardless). Der verknüpfte Beleg ist RE-2026-0015." Die letzte Transaktion hat einen **nicht-erfolgreichen Status** (z.B. `failed`, `pending`, `cancelled`). Der Assistent zeigt dann **zwei Informationen**: 1. **Die letzte Transaktion** mit ihrem Status (z.B. "Fehlgeschlagen"), Datum, Betrag und verknüpftem Beleg 2. **Die letzte erfolgreiche Zahlung** als Zusatzinfo – damit du weißt, wann die letzte *tatsächliche* Zahlung stattfand **Beispiel-Antwort:** > "Der letzte Zahlungsversuch von Kevin Szymura am 10.02.2026 über 149,90 € ist fehlgeschlagen (Beleg RE-2026-0018). Die letzte erfolgreiche Zahlung war am 03.01.2026 über 149,90 € per SEPA-Lastschrift." Wenn es **keine einzige erfolgreiche Zahlung** gibt, meldet der Assistent das ebenfalls – z.B. "Es gibt keine erfolgreichen Zahlungen für diesen Kunden." Der Kunde hat **keine Zahlungstransaktionen** (z.B. ein neuer Kunde ohne Belege). **Beispiel-Antwort:** > "Für Kevin Szymura wurden keine Zahlungstransaktionen gefunden." *** ## Belegzahlungen Wenn du wissen möchtest, wie ein bestimmter Beleg bezahlt wurde, nutzt der Assistent den **Belegzahlungen-Workflow**. ### Beispiel-Anfragen | Anfrage | Kontext | | ------------------------------------------- | ------------------------ | | "Wie wurde dieser Beleg bezahlt?" | Auf der Belegdetailseite | | "Welche Zahlungen gibt es zu diesem Beleg?" | Auf der Belegdetailseite | | "Wie wurde Beleg RE-2025-0042 bezahlt?" | Von jeder Seite aus | ### Ablauf Auf einer **Belegdetailseite** wird der Seitenkontext verwendet. Von anderen Seiten aus sucht der Assistent den Beleg per Nummer. Bei mehreren Treffern zeigt er eine **Auswahlkarte** an. Der Assistent sucht alle Zahlungstransaktionen, die mit diesem Beleg verknüpft sind. Alle Transaktionen werden als Liste angezeigt – jeweils mit Zahlungsmethode, Gateway, Datum, Betrag und Status. ### Szenarien **Beispiel-Antwort:** > "Beleg RE-2025-0042 wurde am 15.01.2025 über 299,00 € per Kreditkarte (Stripe) bezahlt." Bei mehreren Teilzahlungen werden alle aufgelistet. Der Beleg hat keine verknüpften Zahlungstransaktionen (z.B. ein noch unbezahlter Beleg). **Beispiel-Antwort:** > "Zu Beleg RE-2025-0042 wurden keine Zahlungstransaktionen gefunden." *** ## Unterschied: Letzte Zahlung vs. Zahlungen eines Belegs | | Letzte Zahlung | Belegzahlungen | | ----------------------------- | ------------------------------------------------------------ | ----------------------------------------------------------- | | **Frage** | "Wann hat der Kunde zuletzt bezahlt?" | "Wie wurde dieser Beleg bezahlt?" | | **Ausgangspunkt** | Kunde | Beleg | | **Sucht nach** | Letzter Transaktion des Kunden | Allen Transaktionen eines Belegs | | **Fehlgeschlagene Zahlungen** | Werden mit Hinweis auf letzte erfolgreiche Zahlung angezeigt | Alle Transaktionen werden angezeigt (inkl. fehlgeschlagene) | # Dashboard Source: https://docs.fynn.eu/guide/analytics/dashboard Das Dashboard ist dein Startpunkt von Fynn und bietet einen umfassenden Überblick über wichtige Kennzahlen und Statistiken, die für das erfolgreiche Management deines Unternehmens unerlässlich sind. ## Kennzahlen ### Offene Forderungen Das Dashboard zeigt eine detaillierte Übersicht über offene Forderungen nach Alterskategorien, von "Nicht fällig" bis "Über 90 Tage". Diese Informationen helfen, den Überblick über die offenen Forderungen zu behalten und rechtzeitig Maßnahmen zu ergreifen, um Zahlungsausfälle zu vermeiden. Bei Klick auf die jeweilige Kategorie gelangst du zur Liste der offenen Forderungen. Offene Forderungen Die offenen Forderungen berücksichtigen alle Rechnungen, unabhängig vom Rechnungsdatum. ### Umsatz Die Umsatzübersicht zeigt den **Netto**-Umsatz des aktuellen Monats im Vergleich zum Vormonat an, um Trends zu erkennen und den Geschäftserfolg zu messen. Diese Kennzahl ist entscheidend, um das finanzielle Wachstum des Unternehmens zu verfolgen und Umsatzziele zu setzen. Umsatz Der Umsatz wird auf Basis der Rechnungsstellung berechnet und nicht auf Basis der Zahlungseingänge. Hierbei werden alle Rechnungen berücksichtigt, dessen Rechnungsdatum im aktuellen Monat liegt und deren Status auf `bezahlt` oder `unbezahlt` gesetzt ist. Somit verfälschen stornierte Rechnungen nicht den Umsatz. ### Kunden Die Anzahl der aktiven Kunden wird angezeigt und mit dem Vormonat verglichen. Dies ermöglicht es, die Kundenbasis zu überwachen und das Kundenwachstum im Auge zu behalten. Ein steigender Kundenbestand kann auf erfolgreiche Marketing- und Vertriebsaktivitäten hinweisen. Die Anzahl der aktiven Kunden entspricht allen Kunden, die nicht archiviert sind. ### Aktive Abonnements Die Anzahl der aktiven Abonnements wird angezeigt und mit dem Vormonat verglichen. Die Einsicht zur Entwicklung im zeitlichen Verlauf ermöglicht es, saisonale Schwankungen oder langfristige Trends zu erkennen und entsprechend zu reagieren. Die Anzahl der aktiven Abonnements entspricht allen Abonnements, die aktiviert und dessen Kündigungsdatum noch nicht erreicht ist. ### Akzeptierte Angebote Die Anzahl der akzeptierten Angebote wird angezeigt und mit dem Vormonat verglichen. Zudem ist in der Detailansicht ersichtlich, wie viele Angebote in dem aktuellen Monat erstellt wurden. Diese Kennzahl ist entscheidend, um den Erfolg des Vertriebsteams zu messen und die Effektivität der Angebotsstrategie zu überprüfen. Die Anzahl der akzeptierten Angebote umfasst alle Angebote des aktuellen Monats, die den Status `angenommen` haben. ### MRR Der MRR ist die Gesamtsumme der Einnahmen, die ein Unternehmen in einem bestimmten Monat aus wiederkehrenden Abonnementgebühren generiert. Dies ist eine wichtige Kennzahl, um die Stabilität und das Wachstum der Umsätze im Zeitverlauf zu verfolgen und zu prognostizieren. MRR Der MRR wird auf Basis der aktiven Abonnement-Produkte berechnet. Hierbei werden Einmal-Zahlungen nicht berücksichtigt. Pausierte und gekündigte Abonnements werden ebenfalls nicht in die Berechnung des MRR einbezogen. Lebenslange Gutscheine werden von der Berechnung des MRR abgezogen, bei Gutscheinen die nur für eine bestimmte Anzahl von Abrechnungszyklen oder einmalig gültig sind, wird in der MRR Berechnung nicht berücksichtigt. ### Neuer MRR Der Neuer MRR ist der zusätzliche monatliche Umsatz, der durch neue Kunden oder durch Erweiterungen von bestehenden Kunden generiert wird. Der Neuer MRR wird auf Basis der neu hinzugefügten Abonnements berechnet, die im aktuellen Monat erstellt wurden. ### MRR durch Erweiterung Der MRR durch Erweiterung sind die zusätzlichen Einnahmen aus bestehenden Kunden durch Upgrades oder Erweiterungen ihrer Abonnements. Diese Metrik verdeutlicht die Wichtigkeit der Kundenbindung und des Cross-Selling für das Umsatzwachstum. Der MRR durch Erweiterung wird auf Basis von hinzugefügter Produkte zum bestehenden Abonnement berechnet. ### Churn MRR Der Churn MRR ist der monatliche Umsatzverlust durch gekündigte Abonnements. Der Churn MRR wird auf Basis der gekündigten Abonnements berechnet, dessen Kündigungsdatum (Beendigungsdatum) im aktuellen Monat liegt. # Reporting Source: https://docs.fynn.eu/guide/analytics/reporting Fynn stellt ein umfangreiches Set an Reporting-Berichten bereit und ermöglicht es, wichtige Kennzahlen einzusehen, um fundierte Entscheidungen für das Wachstum Ihres Business zu treffen. Die Berichte sind nach Anfrage über den Menüpunkt `Reporting` erreichbar. ## Berichte Die verfügbaren Berichte sind als CSV Datei exportierbar und können somit einfach innerhalb Ihres Unternehmens geteilt werden oder in anderen Tools weiterverarbeitet werden. ### re:cap-Berichte Die re:cap-Berichte bieten eine umfassende Übersicht über Verträge und Belege, die zum Upload für das Finanzierungs- und Liquditätsmanagement in re:cap verwendet werden können. Der Export enthält zwei CSV-Dateien in einer ZIP-Datei: * **Verträge (Contracts)**: Enthält alle Abonnements mit Details wie Kundeninformationen, Vertragsstatus, Abrechnungsperioden und nächstem Abrechnungsdatum * **Belege (Invoices)**: Enthält alle Belege mit Details wie Nummer, Kunde, Leistungszeitraum, Rechnungsdatum, Fälligkeitsdatum und Status Beide Dateien werden als ZIP-Archiv bereitgestellt und können direkt heruntergeladen werden. Der Export wird im Hintergrund vorbereitet und du erhältst eine E-Mail, sobald der Download bereit ist. ## API Alle wichtigen Kennzahlen des [Dashboards](/guide/analytics/dashboard) sind auch über die API abrufbar und können somit in andere Tools integriert werden. Verwende hierfür den [Analytics](/api-reference/analytics/get-series-data) Endpunkt oder alternativ den [Subscription Revenue](/api-reference/analytics/get-series-data-for-subscription) für MRR, Churn, etc. ```bash theme={null} GET /analytics/series/{type} GET /analytics/subscription-revenue ``` ## Tableau / PowerBI Für eine tiefergehende Analyse können umfangreichere Daten in Tools wie Tableau oder PowerBI integriert werden. Hier werden umfangreichere Daten in Echtzeit bereitgestellt und sind somit flexibel und individuell anpassbar. Spreche uns hierfür gerne an, um die Integration zu besprechen. # Add-Ons Source: https://docs.fynn.eu/guide/catalogue/addons Erstelle und verwalte Add-Ons. In Fynn können Produkte sowohl als Hauptprodukte als auch als Add-Ons verwendet werden, wodurch eine effiziente Produktverwaltung und flexible Angebote ermöglicht werden. ## Vorteile ### Effiziente Produktverwaltung Durch die Verwendung von Add-Ons in Fynn kann die Produktliste effizienter verwaltet werden. Es entstehen keine Dopplungen, da Produkte sowohl als Hauptprodukte als auch als Add-Ons definiert werden können. Hierdurch wird die Übersichtlichkeit der Produktliste verbessert und die Verwaltung der Produkte vereinfacht. ### Flexibilität bei der Angebotserstellung Mit Add-Ons kannst Du flexiblere Angebote für Deine Kunden erstellen. Du kannst verschiedene Kombinationen von Hauptprodukten und Add-Ons anbieten, um den unterschiedlichen Anforderungen und Budgets Deiner Kunden gerecht zu werden. ## Add-On erstellen Um ein Produkt als Add-On zu definieren, hast du mehrere Möglichkeiten: * **Abonnements**: Bei der Abonnement-Anlage kannst Du ein Produkt als Add-On definieren, indem Du es als "Unterprodukt" hinzufügst. Hiermit werden Laufzeiten und Kündigungsfristen vererbt. Abonnement Add-On Weitere Informationen findest Du unter [Abonnements verwalten](/guide/subscriptions/introduction). * **Pläne**: Bei der Verwaltung deiner Pläne kannst Du ein Produkt als Add-On definieren, indem du dieses im Bereich "Add-On" hinzufügst. Anschließend kannst du einen Preis für das Add-On festlegen oder einen bestehenden Preis verwenden. Plan Add-On Um Pläne für deine Organisation freizuschalten, nehme bitte [Kontakt mit uns auf](mailto:hi@fynn.eu). Um ein Produkt zu erstellen, siehe dir [Produkte verwalten](/guide/catalogue/products) an. # Aggregationstypen Source: https://docs.fynn.eu/guide/catalogue/measurements/aggregation-types/overview Wie Nutzungsdaten zusammengefasst werden - Summe, Anzahl, Maximum und mehr. Der Aggregationstyp bestimmt, wie die eingehenden Events zu einem Abrechnungswert zusammengefasst werden. ## Übersicht | Typ | Braucht Feld? | Beschreibung | | ---------------- | ------------- | --------------------------------- | | **Anzahl** | Nein | Zählt die Anzahl der Events | | **Summe** | Ja | Addiert die Werte eines Feldes | | **Maximum** | Ja | Nimmt den höchsten Wert | | **Minimum** | Ja | Nimmt den niedrigsten Wert | | **Durchschnitt** | Ja | Berechnet den Mittelwert | | **Eindeutig** | Ja | Zählt einzigartige Werte | | **Letzter Wert** | Ja | Nimmt den zuletzt gemeldeten Wert | *** ## Anzahl (Count) Zählt, wie oft ein Event aufgetreten ist. Kein Feld nötig. **Beispiel:** API-Aufrufe zählen | Event | Aggregation | | ------------ | ------------- | | `api_call` | +1 | | `api_call` | +1 | | `api_call` | +1 | | **Ergebnis** | **3 Aufrufe** | **Wann nutzen:** * API-Aufrufe * Logins * Transaktionen * Nachrichten gesendet *** ## Summe (Sum) Addiert die Werte eines bestimmten Feldes. **Beispiel:** Token-Verbrauch summieren (Feld: `tokens`) | Event | tokens | Aggregation | | ------------ | ------ | -------------- | | `ai_request` | 150 | +150 | | `ai_request` | 300 | +300 | | `ai_request` | 50 | +50 | | **Ergebnis** | | **500 Tokens** | **Wann nutzen:** * Token-/Credit-Verbrauch * Datenvolumen (GB) * Transaktionsbeträge * E-Mails versendet *** ## Maximum (Max) Nimmt den höchsten Wert im Abrechnungszeitraum. **Beispiel:** Maximale gleichzeitige Nutzer (Feld: `active_users`) | Event | active\_users | Aggregation | | ------------ | ------------- | ------------- | | `user_count` | 10 | max = 10 | | `user_count` | 25 | max = 25 | | `user_count` | 18 | max = 25 | | **Ergebnis** | | **25 Nutzer** | **Wann nutzen:** * Gleichzeitige Nutzer (Seats) * Peak-Speicherverbrauch * Maximale Bandbreite * Höchste CPU-Auslastung *** ## Minimum (Min) Nimmt den niedrigsten Wert im Abrechnungszeitraum. **Beispiel:** Minimaler Kontostand (Feld: `balance`) | Event | balance | Aggregation | | --------------- | ------- | ----------- | | `balance_check` | 1000 | min = 1000 | | `balance_check` | 500 | min = 500 | | `balance_check` | 750 | min = 500 | | **Ergebnis** | | **500** | **Wann nutzen:** * Mindestguthaben * Niedrigste Verfügbarkeit * Minimale Ressourcennutzung *** ## Durchschnitt (Average) Berechnet den Mittelwert aller gemeldeten Werte. **Beispiel:** Durchschnittliche Response Time (Feld: `response_ms`) | Event | response\_ms | Aggregation | | ------------ | ------------ | ----------- | | `api_call` | 100 | | | `api_call` | 150 | | | `api_call` | 200 | | | **Ergebnis** | | **150 ms** | **Wann nutzen:** * Durchschnittliche Verarbeitungszeit * Mittlere Dateigröße * Durchschnittlicher Verbrauch pro Request *** ## Eindeutig (Unique Count) Zählt, wie viele unterschiedliche Werte ein Feld hatte. **Beispiel:** Aktive Nutzer im Monat (Feld: `user_id`) | Event | user\_id | Aggregation | | ------------ | -------- | ----------------------------- | | `login` | user-A | 1 eindeutig | | `login` | user-B | 2 eindeutig | | `login` | user-A | 2 eindeutig (bereits gezählt) | | `login` | user-C | 3 eindeutig | | **Ergebnis** | | **3 aktive Nutzer** | **Wann nutzen:** * Monthly Active Users (MAU) * Eindeutige Kunden * Verschiedene verwendete Features * Anzahl verschiedener Produkte *** ## Letzter Wert (Latest) Nimmt den zuletzt gemeldeten Wert. Setzt sich nicht zurück nach Abrechnung. **Beispiel:** Aktueller Speicherverbrauch (Feld: `storage_gb`) | Event | storage\_gb | Aggregation | | --------------- | ----------- | ------------ | | `storage_check` | 50 | letzter = 50 | | `storage_check` | 55 | letzter = 55 | | `storage_check` | 52 | letzter = 52 | | **Ergebnis** | | **52 GB** | **Wann nutzen:** * Aktueller Speicherverbrauch * Aktuelle Seat-Anzahl * Lizenzstand * Persistente Werte, die nicht summiert werden **Wichtig:** Bei "Letzter Wert" wird der Wert **nicht** nach jeder Abrechnung auf 0 zurückgesetzt. Der letzte gemeldete Wert bleibt bestehen. *** ## Vergleich: Wann welchen Typ? | Use Case | Aggregation | Feld | | -------------------- | ------------ | -------------- | | API-Calls zählen | Anzahl | - | | Token summieren | Summe | `tokens` | | Speicher (aktuell) | Letzter Wert | `storage_gb` | | Speicher (Peak) | Maximum | `storage_gb` | | Aktive User (unique) | Eindeutig | `user_id` | | Seats (Peak) | Maximum | `active_seats` | | Response Time (Ø) | Durchschnitt | `response_ms` | # Nutzungsmetriken Source: https://docs.fynn.eu/guide/catalogue/measurements/billable-metrics Definiere, wie Nutzungsdaten gemessen und abgerechnet werden. Nutzungsmetriken definieren, welche Ereignisse aus deiner Anwendung erfasst und wie sie für die Abrechnung aggregiert werden. Du legst fest: Welches Ereignis? Welches Feld? Wie zählen? ## Beispiel: AI-Anwendung Stell dir vor, du betreibst eine AI-Anwendung und willst zwei Dinge abrechnen: 1. **Token-Verbrauch** - Wie viele Tokens hat der Kunde verbraucht? 2. **API-Aufrufe** - Wie oft wurde die API aufgerufen? Dafür erstellst du zwei Produkte mit nutzungsbasierter Abrechnung: | Produkt | Event-Name | Aggregation | Feld | | --------------- | ------------ | ----------- | ------------- | | Token-Verbrauch | `ai_request` | SUM | `tokens_used` | | API-Aufrufe | `ai_request` | COUNT | - | *** ## Nutzungsbasierte Abrechnung aktivieren Die Konfiguration erfolgt direkt am **Produkt**. Du aktivierst die nutzungsbasierte Abrechnung und definierst, welche Events wie gemessen werden. Gehe zu [Katalog > Produkte](https://app.fynn.eu/catalogue/products) und öffne das gewünschte Produkt. Aktiviere den Schalter **Nutzungsbasierte Abrechnung aktivieren**. Nutzungsbasierte Abrechnung am Produkt konfigurieren * **Event-Name**: Welches Event soll erfasst werden (z.B. `email_sent`, `ai_request`) * **Name**: Anzeigename der Metrik (erscheint in der Abonnement-Ansicht) Wähle, wie die Events zusammengefasst werden: * **COUNT** - Anzahl der Events zählen * **SUM** - Werte eines Feldes summieren * **UNIQUE\_COUNT** - Eindeutige Werte zählen * **MAX** - Höchsten Wert ermitteln * **LATEST** - Letzten gemeldeten Wert verwenden * **AVERAGE** - Durchschnitt berechnen Definiere Bedingungen, die Events erfüllen müssen, um in die Aggregation einbezogen zu werden. * **Beschreibung**: Wird auf Rechnungen unter dem Produktnamen angezeigt (Markdown möglich) * **Event-Anzeigeformat**: Formatvorlage für die Nutzungsaufschlüsselung (z.B. `API Call to {endpoint} at {timestamp}`) Mit **Test Event pushen** kannst du direkt ein Test-Event senden, um die Konfiguration zu prüfen. *** ## Abrechnungszeitpunkt: immer nachgelagert Nutzungsbasierte Produkte werden **zwingend nachgelagert abgerechnet**. Eine Vorausabrechnung ist nicht möglich und im PricePlan‑Editor automatisch gesperrt. Der Grund ist einfach: Die abzurechnende Menge ergibt sich aus den **Nutzungsereignissen innerhalb der Periode**. Vor Periodenende ist sie schlicht nicht bekannt. Eine Rechnung zum Periodenstart würde entweder eine Phantasiemenge ansetzen (und später nachkorrigiert werden müssen) oder gar nichts berechnen (und ist damit redundant). **In der Praxis heißt das:** * Eine monatlich abgerechnete Nutzungsmetrik mit Vertragsstart 1. Mai → erste Rechnung läuft am 1. Juni und enthält die im Mai erfassten Ereignisse. * `Vorausabrechnung` ist im PricePlan auf `Nachgelagert` festgeschrieben. * Die Menge im Abonnement bleibt leer (`null`) — sie wird zur Abrechnungszeit aus den Events ermittelt. Wenn du eine Mischform aus fester Grundgebühr und nutzungsbasierter Komponente benötigst (z.B. „mindestens 10.000 API‑Calls inklusive, danach pro Call"), modellierst du das als **zwei separate Abonnementpositionen**: eine feste, die im Voraus läuft, plus eine nutzungsbasierte mit Freikontingent, die nachgelagert läuft. Mehr dazu im Artikel [Vorausabrechnung vs. Nachgelagert](/guide/catalogue/pricing-and-billing-timing). *** ## Aggregationstypen Je nachdem, was du messen willst, wählst du einen passenden Aggregationstyp: | Typ | Beschreibung | Beispiel | | ---------------- | --------------------------- | ------------------------------- | | **Anzahl** | Zählt die Events | 150 API-Aufrufe | | **Summe** | Addiert ein Feld | 45.000 Tokens | | **Maximum** | Höchster Wert im Zeitraum | Max. 50 gleichzeitige User | | **Durchschnitt** | Mittelwert eines Feldes | Ø 300 Tokens pro Request | | **Eindeutig** | Anzahl einzigartiger Werte | 12 verschiedene Modelle genutzt | | **Letzter Wert** | Aktuellster gemeldeter Wert | Aktueller Speicherverbrauch | Für **Summe**, **Maximum**, **Durchschnitt**, **Eindeutig** und **Letzter Wert** musst du ein Feld angeben. **Anzahl** zählt einfach die Events - kein Feld nötig. [Mehr zu Aggregationstypen](/guide/catalogue/measurements/aggregation-types/overview) *** ## Feld angeben Das Feld bestimmt, welcher Wert aus dem Event aggregiert wird. **Beispiel Event:** ```json theme={null} { "eventName": "ai_request", "properties": { "tokens_used": 350, "model": "gpt-4", "endpoint": "/v1/completions" } } ``` Für die Summe der Tokens gibst du als Feld `tokens_used` an. ### Verschachtelte Felder Du kannst auch auf verschachtelte Werte zugreifen mit Punkt-Notation: ```json theme={null} { "properties": { "usage": { "input_tokens": 100, "output_tokens": 250 } } } ``` Feld: `usage.input_tokens` → aggregiert die Input-Tokens. *** ## Filter Mit Filtern kannst du bestimmen, welche Events in die Berechnung einfließen. **Beispiel:** Du willst nur erfolgreiche Requests zählen: ```json theme={null} { "property": "status_code", "operator": "equals", "value": 200 } ``` ### Verfügbare Operatoren | Operator | Beschreibung | Beispiel | | ------------ | ---------------------- | ------------------------------------ | | `equals` | Exakte Übereinstimmung | `status_code` = 200 | | `not-equals` | Nicht gleich | `status_code` ≠ 500 | | `gt` | Größer als | `tokens_used` > 100 | | `gte` | Größer oder gleich | `tokens_used` ≥ 100 | | `lt` | Kleiner als | `tokens_used` \< 1000 | | `lte` | Kleiner oder gleich | `tokens_used` ≤ 1000 | | `in` | In Liste enthalten | `model` in \["gpt-4", "gpt-4-turbo"] | | `not-in` | Nicht in Liste | `model` nicht in \["gpt-3.5"] | | `contains` | Enthält Text | `endpoint` enthält "/v1/" | **Mehrere Filter:** Alle Filter müssen zutreffen (UND-Verknüpfung). *** ## Gruppierung (Group By) Mit Gruppierung kannst du Events nach Eigenschaften gruppieren, um für jede Gruppe **separate Abrechnungspositionen** zu erstellen. Dies ermöglicht eine detaillierte Aufschlüsselung auf der Rechnung. Jede Gruppe erscheint als eigene Position auf der Rechnung. Ideal, wenn du Kunden zeigen willst, wie sich ihre Nutzung zusammensetzt. ### Gruppierung konfigurieren In der Produkt-Konfiguration kannst du eine oder mehrere Gruppierungseigenschaften hinzufügen: 1. Öffne den Bereich **Gruppierung** 2. Wähle die Event-Eigenschaft aus, nach der gruppiert werden soll 3. Füge bei Bedarf weitere Eigenschaften hinzu **Beispiele für Gruppierungseigenschaften:** * `model` - Gruppierung nach AI-Modell * `region` - Gruppierung nach Region * `endpoint` - Gruppierung nach API-Endpoint ### Verschachtelte Eigenschaften Du kannst auch auf verschachtelte Felder zugreifen mit Punkt-Notation: * `properties.region` - Feld `region` innerhalb von `properties` * `metadata.customer.segment` - Tief verschachteltes Feld ### Beispiel: Token-Verbrauch pro Modell **Konfiguration:** ``` groupBy: ["model"] ``` **Ergebnis auf der Rechnung:** | Position | Menge | Einzelpreis | Gesamt | | ------------------------- | ------ | ----------- | ------ | | AI Tokens (gpt-4) | 25.000 | 0,03€/1k | 7,50€ | | AI Tokens (gpt-4-turbo) | 15.000 | 0,02€/1k | 3,00€ | | AI Tokens (gpt-3.5-turbo) | 5.000 | 0,005€/1k | 0,25€ | ### Mehrere Dimensionen Du kannst auch nach mehreren Feldern gruppieren. Jede Kombination wird zur eigenen Position: **Konfiguration:** ``` groupBy: ["model", "endpoint"] ``` **Ergebnis:** | Modell | Endpoint | Tokens | | ----------- | --------------- | ------ | | gpt-4 | /v1/completions | 20.000 | | gpt-4 | /v1/chat | 5.000 | | gpt-4-turbo | /v1/completions | 15.000 | Je mehr Gruppierungsdimensionen, desto mehr Positionen auf der Rechnung. Wähle nur die Dimensionen, die für deine Kunden relevant sind. *** ## Event-Anzeigeformat Mit dem **Event-Anzeigeformat** kannst du festlegen, wie einzelne Events in der Nutzungsaufschlüsselung auf Rechnungen angezeigt werden. Dies verbessert die Lesbarkeit für deine Kunden. ### Platzhalter verwenden Du kannst Platzhalter verwenden, um Event-Eigenschaften in die Anzeige einzubinden: **Beispiel:** ``` API Call to {endpoint} at {timestamp} ``` **Event:** ```json theme={null} { "eventName": "api_call", "properties": { "endpoint": "/api/users", "timestamp": "2026-01-15T10:30:00Z" } } ``` **Anzeige in der Nutzungsaufschlüsselung:** ``` API Call to /api/users at 2026-01-15T10:30:00Z ``` ### Verschachtelte Eigenschaften Du kannst auch auf verschachtelte Eigenschaften zugreifen: **Format:** ``` Request to {metadata.region} using {model} ``` **Event:** ```json theme={null} { "properties": { "metadata": { "region": "eu-west-1" }, "model": "gpt-4" } } ``` **Anzeige:** ``` Request to eu-west-1 using gpt-4 ``` ### Platzhalter-Syntax * **Einfache Eigenschaften**: `{propertyName}` * **Verschachtelte Eigenschaften**: `{nested.property.name}` * **Platzhalter müssen geschlossen sein**: `{property}` ✅, `{property` ❌ * **Platzhalternamen**: Müssen mit Buchstabe, Zahl oder Unterstrich beginnen und können Buchstaben, Zahlen, Unterstriche und Punkte enthalten ### Beispiele | Format | Event-Eigenschaften | Anzeige | | ------------------------------------ | ----------------------------------------------------- | --------------------------------------- | | `API Call to {endpoint}` | `endpoint: "/api/users"` | `API Call to /api/users` | | `{model} request at {timestamp}` | `model: "gpt-4"`, `timestamp: "2026-01-15T10:30:00Z"` | `gpt-4 request at 2026-01-15T10:30:00Z` | | `Storage usage: {usage.bytes} bytes` | `usage: { bytes: 1024 }` | `Storage usage: 1024 bytes` | ### Standardformat (Fallback) Wenn kein `eventDisplayFormat` definiert ist, wird automatisch das Standardformat verwendet: ``` {eventName} at {timestamp} ``` **Beispiel:** * Event: `eventName: "api_call"`, `timestamp: "2026-01-15T10:30:00Z"` * Anzeige: `api_call at 2026-01-15T10:30:00Z` ### Vorschau im Formular Beim Erstellen oder Bearbeiten einer Nutzungsmetrik kannst du eine Live-Vorschau sehen, die auf einem Beispiel-Ereignis basiert. Dies hilft dir, das Format zu testen, bevor du es speicherst. Wenn kein Format definiert ist, wird die Vorschau mit dem Standardformat angezeigt. Wenn ein Platzhalter auf eine Eigenschaft verweist, die im Event nicht vorhanden ist, wird der Platzhalter als leerer String angezeigt. *** ## Praxisbeispiel: AI Usage Billing Du bietest eine AI-Plattform an und willst Token-Verbrauch abrechnen. ### 1. Produkt konfigurieren Erstelle ein Produkt "AI Token Verbrauch" und aktiviere die nutzungsbasierte Abrechnung: | Einstellung | Wert | | ----------- | ------------------ | | Event-Name | `ai_request` | | Name | AI Token Verbrauch | | Aggregation | SUM | | Feld | `tokens_used` | ### 2. Events senden Deine Anwendung sendet bei jedem AI-Request ein Event: ```json theme={null} { "transactionId": "req-abc-123", "eventName": "ai_request", "timestamp": "2026-01-15T14:30:00Z", "customerId": "cust-xyz", "properties": { "tokens_used": 350, "model": "gpt-4", "endpoint": "/v1/completions", "status_code": 200 } } ``` ### 3. Abrechnung Am Monatsende erhält der Kunde eine Rechnung mit Aufschlüsselung: | Position | Menge | Preis | | ------------------------- | ------ | ----------------- | | AI Tokens (gpt-4) | 25.000 | 0,03€/1k = 7,50€ | | AI Tokens (gpt-4-turbo) | 15.000 | 0,02€/1k = 3,00€ | | AI Tokens (gpt-3.5-turbo) | 5.000 | 0,005€/1k = 0,25€ | | **Gesamt** | | **10,75€** | *** ## Praxisbeispiel: API-Aufrufe zählen Du willst zusätzlich die Anzahl der API-Aufrufe abrechnen - unabhängig vom Token-Verbrauch. ### Produkt konfigurieren Erstelle ein Produkt "API Aufrufe" und aktiviere die nutzungsbasierte Abrechnung: | Einstellung | Wert | | ----------- | --------------------------------- | | Event-Name | `ai_request` | | Name | API Aufrufe | | Aggregation | COUNT | | Filter | `status_code` in \[200, 201, 204] | Diese Konfiguration zählt nur erfolgreiche Requests. Fehlgeschlagene Requests (500er) werden nicht berechnet. *** ## In der Abonnement-Ansicht Nutzungsmetriken im Abonnement In der Abonnement-Ansicht siehst du die aktuelle, noch nicht abgerechnete Nutzung. Klicke auf das Auge-Symbol, um die Details zu sehen: Metrik Details Hier siehst du: * Den Event Name und die Aggregation * Den aggregierten Wert und die Anzahl der Events * Den Zeitraum der noch nicht abgerechneten Events * Die einzelnen Events mit Zeitstempel *** ## Inklusiveinheiten (Free Units) Inklusiveinheiten ermöglichen es, eine bestimmte Menge kostenlos anzubieten. Erst wenn die Nutzung die Inklusiveinheiten überschreitet, wird abgerechnet. **Beispiel:** 1.000 kostenlose API-Calls pro Monat, danach 0,01€ pro Call. ### Proration bei vorzeitiger Beendigung Wenn ein Abonnement-Item mitten im Abrechnungszeitraum endet (z.B. durch Kündigung oder Produktwechsel), werden die Inklusiveinheiten für die letzte Abrechnungsperiode anteilig berechnet. **Beispiel:** * Inklusiveinheiten: 1.000 API-Calls/Monat * Abonnement-Item endet am 15. Januar (halber Monat) * Proratierte Inklusiveinheiten für die letzte Periode: 500 API-Calls Die Proration erfolgt nur bei der **letzten Abrechnungsperiode** eines Items. Bei regulären Perioden gelten die vollen Inklusiveinheiten. ### Inklusiveinheiten bei Gruppierung Bei gruppierten Metriken (groupBy) werden Inklusiveinheiten **global** angewendet - nicht pro Gruppe. **Beispiel:** * Inklusiveinheiten: 1.000 Tokens * Nutzung: 600 Tokens (gpt-4) + 800 Tokens (gpt-3.5) = 1.400 Tokens gesamt * Abzüglich Inklusiveinheiten: 1.400 - 1.000 = **400 Tokens abrechenbar** Die 400 abrechenbaren Tokens werden **proportional** auf die Gruppen verteilt: * gpt-4: 600/1.400 × 400 = **171 Tokens** * gpt-3.5: 800/1.400 × 400 = **229 Tokens** Die proportionale Verteilung stellt sicher, dass Inklusiveinheiten nicht für jede Gruppe einzeln abgezogen werden, was zu einer unbeabsichtigten Vervielfachung führen würde. *** ## Mindestabnahme (Minimum Commitment) Die Mindestabnahme garantiert einen Mindestumsatz pro Abrechnungsperiode. Liegt die tatsächliche Nutzung unter dem Minimum, wird trotzdem das Minimum berechnet. **Beispiel:** Mindestabnahme von 500 API-Calls/Monat: * Nutzung: 300 Calls → Berechnet: **500 Calls** (Minimum) * Nutzung: 800 Calls → Berechnet: **800 Calls** (tatsächlich) ### Mindestabnahme bei Gruppierung Bei gruppierten Metriken wird die Mindestabnahme **global** auf die Gesamtnutzung angewendet. **Beispiel:** * Mindestabnahme: 1.000 Tokens * Nutzung: 300 Tokens (gpt-4) + 200 Tokens (gpt-3.5) = 500 Tokens gesamt * Da 500 \< 1.000, wird auf **1.000 Tokens** aufgerundet Die Differenz wird **proportional** auf die Gruppen verteilt: * gpt-4: 300/500 × 1.000 = **600 Tokens** * gpt-3.5: 200/500 × 1.000 = **400 Tokens** ### Kombination: Inklusiveinheiten + Mindestabnahme Werden beide Optionen verwendet, gelten folgende Regeln: 1. **Erst** werden Inklusiveinheiten von der Gesamtnutzung abgezogen 2. **Dann** wird die Mindestabnahme angewendet **Beispiel:** * Inklusiveinheiten: 500 Tokens * Mindestabnahme: 1.000 Tokens * Nutzung: 800 Tokens Berechnung: 1. 800 - 500 (Inklusiv) = 300 Tokens 2. max(300, 1.000) = **1.000 Tokens abrechenbar** *** ## Nächste Schritte Lerne, wie du Nutzungsereignisse an Fynn sendest. Verstehe die verschiedenen Aggregationstypen im Detail. # Nutzungsbasierte Abrechnung Source: https://docs.fynn.eu/guide/catalogue/measurements/introduction Rechne nach tatsächlichem Verbrauch ab - fair und transparent. Mit nutzungsbasierter Abrechnung zahlst du nur, was du wirklich nutzt. Ideal für APIs, SaaS-Produkte, AI-Services oder Cloud-Dienste. ## Wie funktioniert's? Du legst fest, was gemessen wird: Welches Ereignis? Wie aggregieren? Beispiel: "Zähle alle `ai_request` Ereignisse und summiere das Feld `tokens_used`" Deine Anwendung sendet Nutzungsereignisse an Fynn - per API oder CSV-Import. ```json theme={null} { "eventName": "ai_request", "properties": { "tokens_used": 350, "model": "gpt-4" } } ``` Am Ende des Abrechnungszeitraums erstellt Fynn automatisch eine Rechnung basierend auf der tatsächlichen Nutzung. *** ## Beispiele Token-Verbrauch pro Modell, API-Aufrufe, Bildgenerierungen API-Calls, Datentransfer, Webhook-Zustellungen Speicherplatz, Bandbreite, Compute-Zeit E-Mails, SMS, Push-Notifications *** ## Die Bausteine | Baustein | Beschreibung | | -------------------- | --------------------------------------------------------------- | | **Nutzungsmetrik** | Definiert, was und wie gemessen wird | | **Nutzungsereignis** | Einzelnes Ereignis aus deiner App | | **Aggregation** | Wie Ereignisse zusammengefasst werden (Summe, Anzahl, Max, ...) | | **Filter** | Welche Ereignisse berücksichtigt werden | | **Gruppierung** | Aufschlüsselung nach Dimensionen (z.B. pro Modell) | *** ## Dokumentation Erstelle und konfiguriere Nutzungsmetriken mit Filtern und Gruppierung. Sende Nutzungsereignisse per API oder importiere sie per CSV. Verstehe Summe, Anzahl, Maximum und andere Aggregationstypen. Technische Details zur Nutzungsereignisse-API. # Nutzungsbasierte Abrechnung verstehen Source: https://docs.fynn.eu/guide/catalogue/measurements/usage-based-billing Erfahre, wie die nutzungsbasierte Abrechnung funktioniert und wie du die Nutzungsdaten interpretierst Nutzungsbasierte Abrechnung Die nutzungsbasierte Abrechnung ermöglicht es dir, Kunden basierend auf ihrer tatsächlichen Nutzung abzurechnen. Anstatt eines festen monatlichen Preises werden Kunden nur für das berechnet, was sie tatsächlich verwenden. ## Wie funktioniert die nutzungsbasierte Abrechnung? ### Grundprinzip 1. **Nutzungsereignisse werden erfasst**: Deine Anwendung sendet Nutzungsereignisse (z.B. API-Aufrufe, gesendete E-Mails, Speicherplatz) an Fynn 2. **Ereignisse werden aggregiert**: Fynn sammelt alle Ereignisse und berechnet die Gesamtnutzung basierend auf dem Aggregationstyp 3. **Abrechnung erfolgt nachträglich**: Am Ende des Abrechnungszeitraums wird die tatsächliche Nutzung abgerechnet ### Abrechnungsmodus: Nachträglich (Arrears) Im Gegensatz zu festen Abonnements, die im Voraus (Advance) abgerechnet werden, erfolgt die nutzungsbasierte Abrechnung **nachträglich (Arrears)**: * **Feste Abonnements**: Du zahlst am 1. Januar für den gesamten Januar im Voraus * **Nutzungsbasierte Abrechnung**: Du zahlst am 1. Februar für die Nutzung im Januar ## Was zeigen die Metriken? Die angezeigten Metriken zeigen die **aggregierten Nutzungswerte für noch nicht abgerechnete Ereignisse**. Das bedeutet: * ✅ **Enthalten**: Alle Nutzungsereignisse, die noch nicht auf einer Rechnung stehen * ❌ **Nicht enthalten**: Bereits abgerechnete Ereignisse (die bereits auf einer Rechnung erscheinen) ### Beispiel Angenommen, du hast ein Produkt "API-Aufrufe" mit nutzungsbasierter Abrechnung: ``` 01.01.2026: 100 API-Aufrufe → noch nicht abgerechnet 15.01.2026: 200 API-Aufrufe → noch nicht abgerechnet 01.02.2026: Rechnung wird erstellt für Januar → 300 API-Aufrufe werden abgerechnet 02.02.2026: 50 API-Aufrufe → noch nicht abgerechnet ``` **Angezeigte Metrik am 02.02.2026:** * **Menge**: 50 API-Aufrufe (nur die noch nicht abgerechneten) * **Zeitraum**: 01.02.2026 bis 02.02.2026 ## Den Zeitraum verstehen Jede Metrik zeigt einen **Zeitraum** an, z.B. "01.01.2026 bis 01.02.2026". Dieser Zeitraum hat eine klare Bedeutung: ### Startdatum Das **Startdatum** ist das Datum, ab dem noch nicht abgerechnete Ereignisse erfasst werden: * **Wenn bereits abgerechnet wurde**: Das Datum der letzten Abrechnung (z.B. 01.01.2026) * **Wenn noch nie abgerechnet wurde**: Das Startdatum des Abonnements **Wichtig**: Wenn eine Schwellenwert-Abrechnung (Threshold Billing) stattfindet, ändert sich das Startdatum entsprechend, da dann ein neuer Abrechnungszeitraum beginnt. ### Enddatum Das **Enddatum** ist immer das aktuelle Datum und die aktuelle Uhrzeit. Es zeigt, bis wann die Nutzung erfasst wurde. ### Beispiel: Zeitraum-Interpretation ``` Zeitraum: 01.01.2026 bis 01.02.2026 ``` **Bedeutung:** * **01.01.2026**: Letztes Abrechnungsdatum (oder Start des Abonnements) * **01.02.2026**: Heutiges Datum **Was wird angezeigt:** * Alle Nutzungsereignisse vom 01.01.2026 00:00:00 bis zum 01.02.2026 (aktueller Zeitpunkt) * Die aggregierte Gesamtnutzung in diesem Zeitraum * **Nur** noch nicht abgerechnete Ereignisse ## Wann wird abgerechnet? ### Reguläre Abrechnung (Period Billing) Die nutzungsbasierte Abrechnung erfolgt **am Ende des Abrechnungszeitraums**: * **Monatliche Abrechnung**: Am 1. des Monats wird die Nutzung des Vormonats abgerechnet * **Quartalsweise Abrechnung**: Am 1. des Quartals wird die Nutzung des Vorquartals abgerechnet **Beispiel:** ``` Abrechnungsintervall: Monatlich Abrechnungsdatum: 01.02.2026 Abrechnungszeitraum: 01.01.2026 - 31.01.2026 ``` ### Schwellenwert-Abrechnung (Threshold Billing) Zusätzlich zur regulären Abrechnung kannst du **Schwellenwerte** definieren, die eine Abrechnung auslösen, wenn ein bestimmter Nutzungswert oder Betrag erreicht wird: * **Beispiel**: Wenn 1000 API-Aufrufe erreicht werden, wird sofort eine Rechnung erstellt * **Vorteil**: Du erhältst früher Zahlungen und reduzierst das Ausfallrisiko **Wichtig**: Nach einer Schwellenwert-Abrechnung beginnt ein neuer Abrechnungszeitraum. Das Startdatum der Metriken wird entsprechend aktualisiert. ## Wie werden die Werte aggregiert? Die Art der Aggregation hängt vom **Aggregationstyp** deiner Messung ab: | Aggregationstyp | Beschreibung | Beispiel | | --------------------- | ------------------------- | -------------------------------- | | **Summe** | Alle Werte werden addiert | 100 + 200 + 50 = 350 API-Aufrufe | | **Anzahl** | Anzahl der Ereignisse | 3 Ereignisse | | **Durchschnitt** | Durchschnittswert | (100 + 200 + 50) / 3 = 116,67 | | **Maximum** | Höchster Wert | max(100, 200, 50) = 200 | | **Zuletzt** | Letzter gemeldeter Wert | 50 (letzter Wert) | | **Eindeutige Anzahl** | Anzahl eindeutiger Werte | 3 eindeutige Kunden | ## Praktisches Beispiel ### Szenario: E-Mail-Versand-Service Du bietest einen E-Mail-Versand-Service an, der pro gesendeter E-Mail abgerechnet wird. **Setup:** * Produkt: "E-Mail-Versand" * Messung: "Gesendete E-Mails" (Aggregation: Summe) * Preis: 0,01 € pro E-Mail **Ablauf:** 1. **01.01.2026**: Abonnement startet * Angezeigte Nutzung: 0 E-Mails * Zeitraum: 01.01.2026 bis 01.01.2026 2. **15.01.2026**: Kunde sendet 1.000 E-Mails * Angezeigte Nutzung: 1.000 E-Mails * Zeitraum: 01.01.2026 bis 15.01.2026 * **Noch nicht abgerechnet** 3. **25.01.2026**: Kunde sendet weitere 500 E-Mails * Angezeigte Nutzung: 1.500 E-Mails * Zeitraum: 01.01.2026 bis 25.01.2026 * **Noch nicht abgerechnet** 4. **01.02.2026**: Reguläre Abrechnung * Rechnung wird erstellt für 1.500 E-Mails × 0,01 € = 15,00 € * Zeitraum der Rechnung: 01.01.2026 - 31.01.2026 5. **02.02.2026**: Kunde sendet 200 weitere E-Mails * Angezeigte Nutzung: 200 E-Mails * Zeitraum: 01.02.2026 bis 02.02.2026 * **Neuer Abrechnungszeitraum beginnt** ## Häufige Fragen ### Warum zeigt die Metrik einen anderen Wert als erwartet? **Mögliche Gründe:** 1. **Ereignisse wurden bereits abgerechnet**: Die Metrik zeigt nur noch nicht abgerechnete Ereignisse 2. **Falscher Zeitraum**: Prüfe, ob der Zeitraum korrekt ist (Startdatum = letztes Abrechnungsdatum) 3. **Ereignisse wurden noch nicht erfasst**: Prüfe, ob die Nutzungsereignisse korrekt an Fynn gesendet wurden ### Warum ändert sich das Startdatum? Das Startdatum ändert sich, wenn: * Eine reguläre Abrechnung stattgefunden hat * Eine Schwellenwert-Abrechnung ausgelöst wurde * Das Abonnement neu gestartet wurde ### Was passiert, wenn Ereignisse verspätet eintreffen? Fynn berücksichtigt auch verspätet eintreffende Ereignisse korrekt: * Ereignisse werden basierend auf ihrem **Zeitstempel** (timestamp) dem richtigen Abrechnungszeitraum zugeordnet * Auch wenn ein Ereignis erst später erfasst wird, wird es dem korrekten Zeitraum zugeordnet ### Wie kann ich die Details einer Metrik einsehen? Du kannst die Details einer Metrik einsehen, um: * Alle einzelnen Nutzungsereignisse zu sehen * Den Zeitraum im Detail zu verstehen * Die Aggregation nachzuvollziehen Nutze hierfür die Detailansicht der Metrik in der Abonnementübersicht. ## Zusammenfassung * ✅ **Metriken zeigen**: Aggregierte Nutzungswerte für noch nicht abgerechnete Ereignisse * ✅ **Startdatum**: Letztes Abrechnungsdatum (oder Abonnementstart) * ✅ **Enddatum**: Aktuelles Datum und Uhrzeit * ✅ **Abrechnung**: Nachträglich am Ende des Abrechnungszeitraums * ✅ **Schwellenwerte**: Können eine frühere Abrechnung auslösen Die nutzungsbasierte Abrechnung gibt dir vollständige Transparenz über die Nutzung deiner Kunden und ermöglicht eine faire, verbrauchsabhängige Abrechnung. # Preis-Assistent Source: https://docs.fynn.eu/guide/catalogue/price-assistant Erstelle und bearbeite Preispläne in natürlicher Sprache mit dem KI-Preis-Assistenten. Der KI-Preis-Assistent ermöglicht es, Preise in natürlicher Sprache zu beschreiben und automatisch strukturierte Preispläne generieren zu lassen. Statt Preistypen, Intervalle und Staffeln manuell zu konfigurieren, beschreibst du einfach, wie dein Produkt abgerechnet werden soll. Der Preis-Assistent ist über die Preiskonfiguration im Produktkatalog verfügbar. Du findest den Button **Mit KI erstellen** beim Anlegen neuer Preise. *** ## Einzelnen Preis erstellen Erstelle einen einzelnen Preisplan per Beschreibung. Klicke beim Erstellen eines neuen Preises auf **Mit KI erstellen**. Beschreibe den Preis in natürlicher Sprache, z.B.: * "99 € monatlich" * "10 € pro Nutzer pro Monat" * "Die ersten 10 Einheiten kosten 5 €, danach 3 € pro Stück" * "2 % vom gemeldeten Umsatz" Der Assistent zeigt den erkannten Preisplan mit einer Abrechnungsvorschau an. Du siehst Preistyp, Intervall, Beträge und ggf. Staffeln auf einen Blick. Klicke auf **Übernehmen**, um den Preis zu erstellen. Alternativ kannst du mit **Neu generieren** eine neue Interpretation anfordern. ### Beispiele | Beschreibung | Erkannter Preistyp | | ------------------------------------------------------------------ | --------------------------------- | | "49 € pro Monat" | Pauschale (Flat Fee), monatlich | | "299 € einmalige Setup-Gebühr" | Pauschale, einmalig | | "9 € pro Nutzer pro Monat" | Pro Einheit (Per Unit), monatlich | | "1-10 Stück: 5 € je Stück, 11+: 3 € je Stück" | Staffel (Tiered) | | "Bis 100: 10 €/Stück, ab 101: 7 €/Stück (alle zum gleichen Preis)" | Volumen (Volume) | | "1-10 Nutzer: 49 €, 11-50 Nutzer: 99 €" | Stufen (Stair Step) | | "2 % von jeder Transaktion" | Prozent (Percentage) | *** ## Gesamtes Produkt mit mehreren Preisen beschreiben Beschreibe ein komplettes Produkt mit allen Preiskomponenten in einem Schritt. Der Assistent erkennt automatisch, welche Teile getrennte Preispläne erfordern. Beschreibe alle Preiskomponenten deines Produkts, z.B.: > "Unser CRM kostet 49 € Grundgebühr monatlich plus 9 € pro Nutzer. Einmalige Setup-Gebühr 299 €." Der Assistent zeigt alle erkannten Preispläne als Karten an – jeweils mit Preistyp, Intervall und Abrechnungsvorschau. In diesem Beispiel: * Setup-Gebühr: 299 € einmalig (Pauschale) * Grundgebühr: 49 € monatlich (Pauschale) * Nutzergebühr: 9 € pro Nutzer/Monat (Pro Einheit) Entferne nicht benötigte Preise per Klick auf das Papierkorb-Symbol. Klicke dann auf **Preise übernehmen**, um alle verbleibenden Preise auf einmal zu erstellen. Der Assistent trennt automatisch zwischen einmaligen und wiederkehrenden Kosten sowie zwischen verschiedenen Abrechnungseinheiten (z.B. Grundgebühr vs. pro Nutzer). *** ## Unterstützte Preistypen Der Assistent erkennt alle in Fynn verfügbaren Preistypen: | Preistyp | Wann erkannt | | -------------------------- | ---------------------------------------------------- | | **Pauschale** (Flat Fee) | Fester Betrag ohne Mengenbezug – "99 € pro Monat" | | **Pro Einheit** (Per Unit) | Betrag pro Stück/Nutzer/Einheit – "10 € pro Nutzer" | | **Staffel** (Tiered) | Mehrere Mengenbereiche mit unterschiedlichen Preisen | | **Volumen** (Volume) | Gesamtmenge bestimmt den Einheitspreis für alle | | **Stufen** (Stair Step) | Fester Betrag pro Mengenstufe | | **Prozent** (Percentage) | Prozentualer Anteil eines gemeldeten Werts | Eine detaillierte Erklärung der Berechnungslogik findest du unter [Preisberechnung](/guide/catalogue/prices/calculation). *** ## Tipps für bessere Ergebnisse Nenne das Abrechnungsintervall explizit: "monatlich", "jährlich", "einmalig" oder "vierteljährlich". Bei mengenbasierten Preisen hilft es, die Einheit zu nennen: "pro Nutzer", "pro API-Aufruf", "pro GB". Für Staffelpreise nenne die Grenzen und Preise: "1-10 Stück: 5 €, 11-50 Stück: 3 €, ab 51: 2 €". Wenn Einheiten inklusive sein sollen: "Die ersten 100 API-Aufrufe sind kostenlos, danach 0,02 € pro Aufruf." # Preisberechnung Source: https://docs.fynn.eu/guide/catalogue/prices/calculation So berechnet Fynn die verschiedenen Preistypen im Detail Fynn unterstützt sechs verschiedene Preistypen, die jeweils einer festen Berechnungslogik folgen. Dieser Guide erklärt, wie die Berechnung für jeden Typ funktioniert und wie Zusatzfunktionen wie freie Einheiten, Mindestabnahme und Basisgebühren einbezogen werden. ## Berechnungsreihenfolge Bevor die eigentliche Preisberechnung startet, werden zwei optionale Anpassungen auf die Menge angewendet: Ist eine Mindestabnahme konfiguriert, wird die Menge auf mindestens diesen Wert gesetzt. `Menge = max(Menge, Mindestabnahme)` Sind freie Einheiten konfiguriert, werden diese von der Menge abgezogen. Die Menge kann nicht negativ werden. `Menge = max(Menge − freie Einheiten, 0)` Die bereinigte Menge wird an die Berechnungslogik des jeweiligen Preistyps übergeben. Die Mindestabnahme wird **vor** den freien Einheiten angewendet. Dadurch ist sichergestellt, dass die Mindestabnahme die Basis bildet, von der anschließend die freien Einheiten abgezogen werden. **Beispiel:** 5 Benutzer, Mindestabnahme 10, freie Einheiten 3 1. Mindestabnahme: max(5, 10) = **10** 2. Freie Einheiten: max(10 − 3, 0) = **7** 3. Es werden 7 Einheiten berechnet. *** ## Pauschale (Flat Fee) Ein fester Betrag pro Abrechnungsperiode, unabhängig von der Menge. | Eingabe | Wert | | ------- | ------- | | Preis | 29,00 € | **Berechnung:** 29,00 € (fest, keine Mengenabhängigkeit) Pauschale eignet sich für Basispakete, Grundgebühren oder einmalige Setup-Gebühren. *** ## Pro Einheit (Per Unit) Der Stückpreis wird mit der bereinigten Menge multipliziert. | Eingabe | Wert | | ---------- | ----------- | | Stückpreis | 5,00 € | | Menge | 10 Benutzer | **Berechnung:** 10 × 5,00 € = **50,00 €** **Mit freien Einheiten:** 10 Benutzer, 3 frei → 7 × 5,00 € = **35,00 €** *** ## Staffelpreis (Tiered) Jeder Mengenbereich hat seinen eigenen Stückpreis. Die Bereiche werden **nacheinander** abgerechnet — jede Einheit erhält den Preis der Stufe, in die sie fällt. ### Stufenkonfiguration | Stufe | Ab Menge | Stückpreis | | ----- | -------- | ---------- | | 1 | 0 | 10,00 € | | 2 | 10 | 8,00 € | | 3 | 50 | 6,00 € | Eine Stufe deckt die Menge von ihrem `Ab Menge`-Wert bis zum `Ab Menge`-Wert der nächsten Stufe ab. Die erste Stufe beginnt immer bei 0. ### Berechnungsbeispiel **25 Einheiten:** | Stufe | Einheiten | Stückpreis | Zwischensumme | | --------- | --------- | ---------- | ------------- | | 1 (0–9) | 10 | 10,00 € | 100,00 € | | 2 (10–24) | 15 | 8,00 € | 120,00 € | **Gesamt: 220,00 €** **60 Einheiten:** | Stufe | Einheiten | Stückpreis | Zwischensumme | | --------- | --------- | ---------- | ------------- | | 1 (0–9) | 10 | 10,00 € | 100,00 € | | 2 (10–49) | 40 | 8,00 € | 320,00 € | | 3 (50–59) | 10 | 6,00 € | 60,00 € | **Gesamt: 480,00 €** Bei Staffelpreisen mit freien Einheiten werden die freien Einheiten **vor** der Stufenzuordnung abgezogen. Die bereinigte Menge durchläuft dann die Stufen von vorne. **Mit freien Einheiten:** 25 Einheiten, 5 frei → 20 bereinigte Einheiten | Stufe | Einheiten | Stückpreis | Zwischensumme | | --------- | --------- | ---------- | ------------- | | 1 (0–9) | 10 | 10,00 € | 100,00 € | | 2 (10–19) | 10 | 8,00 € | 80,00 € | **Gesamt: 180,00 €** *** ## Volumenpreis (Volume) Der Stückpreis wird anhand der **Gesamtmenge** bestimmt. Alle Einheiten erhalten dann denselben Preis. ### Stufenkonfiguration | Stufe | Ab Menge | Stückpreis | | ----- | -------- | ---------- | | 1 | 0 | 10,00 € | | 2 | 10 | 8,00 € | | 3 | 50 | 6,00 € | ### Berechnungsbeispiel **25 Einheiten:** Stufe 2 greift (25 ≥ 10) → 25 × 8,00 € = **200,00 €** **60 Einheiten:** Stufe 3 greift (60 ≥ 50) → 60 × 6,00 € = **360,00 €** **8 Einheiten:** Stufe 1 greift (8 ≥ 0) → 8 × 10,00 € = **80,00 €** Beim Volumenpreis mit freien Einheiten wird die Stufe anhand der **Gesamtmenge** (vor Abzug der freien Einheiten) bestimmt. Die Preisberechnung erfolgt dann mit der **bereinigten Menge** (nach Abzug). **Mit freien Einheiten:** 25 Einheiten, 5 frei 1. Stufenbestimmung: Gesamtmenge 25 → Stufe 2 (8,00 €) 2. Berechnung: (25 − 5) × 8,00 € = 20 × 8,00 € = **160,00 €** *** ## Stufenpreis (Stair Step) Ein **fester Betrag** pro Mengenstufe. Der Preis ist unabhängig von der genauen Menge innerhalb der Stufe. ### Stufenkonfiguration | Stufe | Ab Menge | Festpreis | | ----- | -------- | --------- | | 1 | 0 | 50,00 € | | 2 | 10 | 150,00 € | | 3 | 50 | 300,00 € | ### Berechnungsbeispiel **8 Einheiten:** Stufe 1 greift (8 ≥ 0) → **50,00 €** **25 Einheiten:** Stufe 2 greift (25 ≥ 10) → **150,00 €** **60 Einheiten:** Stufe 3 greift (60 ≥ 50) → **300,00 €** Beim Stufenpreis bestimmt — wie beim Volumenpreis — die **Gesamtmenge** (vor Abzug der freien Einheiten) die Stufe. *** ## Prozentual (Percentage) Ein Prozentsatz wird auf den gemeldeten Wert angewendet. | Eingabe | Wert | | --------------- | --------------- | | Prozentsatz | 2,5 % | | Stückpreis | 1,00 € | | Gemeldeter Wert | 1.000 Einheiten | **Berechnung:** 1.000 × 2,5 % × 1,00 € = 25 × 1,00 € = **25,00 €** Zusätzlich können beim prozentualen Preistyp eigene Freibeträge konfiguriert werden: * **Frei pro Ereignis:** Anzahl Einheiten, die pro Nutzungsereignis abgezogen werden * **Frei pro Gesamt:** Anzahl Einheiten, die von der Gesamtsumme abgezogen werden *** ## Basisgebühr (flatAmount) Neben dem mengenabhängigen Preis kann auf jeder Stufe eine **Basisgebühr** konfiguriert werden. Diese wird als fester Betrag zusätzlich zum Stückpreis berechnet, sobald die jeweilige Stufe Einheiten enthält. Basisgebühren eignen sich für monatliche Grundgebühren, die zusätzlich zu einem nutzungsabhängigen Preis anfallen. ### Beispiel: Staffelpreis mit Basisgebühr | Stufe | Ab Menge | Stückpreis | Basisgebühr | | ----- | -------- | ---------- | ----------- | | 1 | 0 | 5,00 € | 199,00 € | **15 Einheiten:** 15 × 5,00 € + 199,00 € = **274,00 €** ### Beispiel: Mehrere Stufen mit Basisgebühr | Stufe | Ab Menge | Stückpreis | Basisgebühr | | ----- | -------- | ---------- | ----------- | | 1 | 0 | 10,00 € | 99,00 € | | 2 | 20 | 7,00 € | 0,00 € | **30 Einheiten:** | Stufe | Einheiten | Stückpreis | Zwischensumme | Basisgebühr | | --------- | --------- | ---------- | ------------- | ----------- | | 1 (0–19) | 20 | 10,00 € | 200,00 € | 99,00 € | | 2 (20–29) | 10 | 7,00 € | 70,00 € | 0,00 € | **Gesamt: 200,00 € + 99,00 € + 70,00 € = 369,00 €** Die Basisgebühr wird nur berechnet, wenn die Stufe mindestens eine Einheit enthält. Bei Stufen ohne Einheiten fällt keine Basisgebühr an. *** ## Freie Einheiten mit Basisgebühr Wenn ein Preis sowohl freie Einheiten als auch eine Basisgebühr hat, ist es wichtig zu verstehen, wie diese zusammenwirken. Es gibt zwei Varianten: ### Variante 1: Basisgebühr fällt immer an Die freien Einheiten werden als eigene Stufe mit einem Stückpreis von 0 konfiguriert. Die Basisgebühr wird auf dieser Stufe hinterlegt und fällt dadurch **immer** an — auch wenn die Nutzung innerhalb der freien Einheiten liegt. | Stufe | Ab Menge | Stückpreis | Basisgebühr | | ----- | -------- | ---------- | ----------- | | 1 | 0 | 0,00 € | 199,00 € | | 2 | 10 | 99,00 € | 0,00 € | | Stufe | Einheiten | Stückpreis | Zwischensumme | Basisgebühr | | ------- | --------- | ---------- | ------------- | ----------- | | 1 (0–9) | 5 | 0,00 € | 0,00 € | 199,00 € | **Gesamt: 199,00 €** (nur die Basisgebühr, alle Benutzer sind inklusive) | Stufe | Einheiten | Stückpreis | Zwischensumme | Basisgebühr | | --------- | --------- | ---------- | ------------- | ----------- | | 1 (0–9) | 10 | 0,00 € | 0,00 € | 199,00 € | | 2 (10–14) | 5 | 99,00 € | 495,00 € | 0,00 € | **Gesamt: 199,00 € + 495,00 € = 694,00 €** ### Variante 2: Basisgebühr fällt erst nach Verbrauch der freien Einheiten an Die freien Einheiten werden über das Feld `Freie Einheiten` konfiguriert. Die Basisgebühr wird als `flatAmount` auf der ersten Stufe hinterlegt. Da die freien Einheiten **vor** der Stufenberechnung abgezogen werden, greift die Stufe erst, wenn die Nutzung die freien Einheiten übersteigt. **Konfiguration:** 10 freie Einheiten | Stufe | Ab Menge | Stückpreis | Basisgebühr | | ----- | -------- | ---------- | ----------- | | 1 | 0 | 99,00 € | 199,00 € | Abzug freie Einheiten: max(5 − 10, 0) = **0 bereinigte Einheiten** Keine Stufe greift, da keine bereinigten Einheiten vorhanden sind. **Gesamt: 0,00 €** (alle Benutzer liegen innerhalb der freien Einheiten) Abzug freie Einheiten: max(15 − 10, 0) = **5 bereinigte Einheiten** | Stufe | Einheiten | Stückpreis | Zwischensumme | Basisgebühr | | ----- | --------- | ---------- | ------------- | ----------- | | 1 | 5 | 99,00 € | 495,00 € | 199,00 € | **Gesamt: 495,00 € + 199,00 € = 694,00 €** Verwende niemals freie Einheiten und eine Stufe mit Stückpreis 0 gleichzeitig. Das würde dazu führen, dass Einheiten doppelt als kostenlos gewertet werden. *** ## Komplexbeispiel **Szenario:** 99 € pro Benutzer/Monat, 10 Benutzer inklusive, ab dem 15. Benutzer 80 € pro Benutzer, Basisgebühr 199 €. **Konfiguration** (Basisgebühr fällt immer an): | Stufe | Ab Menge | Stückpreis | Basisgebühr | | ----- | -------- | ---------- | ----------- | | 1 | 0 | 0,00 € | 199,00 € | | 2 | 10 | 99,00 € | 0,00 € | | 3 | 15 | 80,00 € | 0,00 € | | Stufe | Einheiten | Stückpreis | Zwischensumme | Basisgebühr | | ------- | --------- | ---------- | ------------- | ----------- | | 1 (0–9) | 5 | 0,00 € | 0,00 € | 199,00 € | **Gesamt: 199,00 € pro Monat** | Stufe | Einheiten | Stückpreis | Zwischensumme | Basisgebühr | | --------- | --------- | ---------- | ------------- | ----------- | | 1 (0–9) | 10 | 0,00 € | 0,00 € | 199,00 € | | 2 (10–11) | 2 | 99,00 € | 198,00 € | 0,00 € | **Gesamt: 199,00 € + 198,00 € = 397,00 € pro Monat** | Stufe | Einheiten | Stückpreis | Zwischensumme | Basisgebühr | | --------- | --------- | ---------- | ------------- | ----------- | | 1 (0–9) | 10 | 0,00 € | 0,00 € | 199,00 € | | 2 (10–14) | 5 | 99,00 € | 495,00 € | 0,00 € | | 3 (15–19) | 5 | 80,00 € | 400,00 € | 0,00 € | **Gesamt: 199,00 € + 495,00 € + 400,00 € = 1.094,00 € pro Monat** # Preise Source: https://docs.fynn.eu/guide/catalogue/prices/introduction Preise für deine Produkte konfigurieren ## Preistypen Fynn unterstützt verschiedene Preistypen, um flexible Abrechnungsmodelle zu ermöglichen. Eine detaillierte Erklärung der Berechnungslogik mit Beispielen findest du unter [Preisberechnung](/guide/catalogue/prices/calculation). Ein fester Preis unabhängig von der Menge. Ideal für Basispakete oder Grundgebühren. **Beispiel:** 29,00 € / Monat für das Starter-Paket Der Preis wird pro Einheit berechnet und mit der Menge multipliziert. **Beispiel:** 5,00 € pro Benutzer × 10 Benutzer = 50,00 € Unterschiedliche Preise für verschiedene Mengenbereiche. Jede Stufe wird separat berechnet. **Beispiel:** * 1-10 Einheiten: 10,00 € pro Einheit * 11-50 Einheiten: 8,00 € pro Einheit * 51+ Einheiten: 6,00 € pro Einheit Bei 60 Einheiten: (10 × 10 €) + (40 × 8 €) + (10 × 6 €) = 480,00 € Der Preis der erreichten Stufe gilt für alle Einheiten. **Beispiel:** * 1-10 Einheiten: 10,00 € pro Einheit * 11-50 Einheiten: 8,00 € pro Einheit * 51+ Einheiten: 6,00 € pro Einheit Bei 60 Einheiten: 60 × 6,00 € = 360,00 € Ein fester Preis pro Stufe, unabhängig von der genauen Menge innerhalb der Stufe. **Beispiel:** * 1-10 Einheiten: 50,00 € * 11-50 Einheiten: 150,00 € * 51+ Einheiten: 300,00 € Bei 60 Einheiten: 300,00 € (Festpreis der Stufe) Der Preis wird als Prozentsatz eines Basiswerts berechnet. **Beispiel:** 2,5% vom Umsatz ## Währungen Fynn unterstützt mehrere Währungen für internationale Kunden. Du kannst Preise in verschiedenen Währungen anlegen. Die verfügbaren Währungen kannst du unter [Einstellungen > Währungen](/guide/tenant/currencies) konfigurieren. Für jeden Preis muss eine Währung ausgewählt werden. Stelle sicher, dass die gewünschten Währungen in den Einstellungen aktiviert sind. ## Dezimalstellen Die Anzahl der Dezimalstellen für Preise wird automatisch basierend auf der Währung festgelegt: | Währung | Dezimalstellen | Beispiel | | ------- | -------------- | --------- | | EUR | 2 | 19,99 € | | USD | 2 | \$19.99 | | CHF | 2 | CHF 19.99 | Bei der Berechnung von Zwischensummen werden intern mehr Dezimalstellen verwendet, um Rundungsfehler zu minimieren. Die finale Summe wird dann gerundet. ## Testphasen Testphasen (Trial Periods) ermöglichen es Kunden, ein Produkt kostenlos zu testen, bevor die reguläre Abrechnung beginnt. Beim Erstellen eines Preises kannst du die Dauer der Testphase in Tagen angeben. Wird ein Abonnement mit einem Preis erstellt, der eine Testphase hat, beginnt die Abrechnung erst nach Ablauf der Testphase. Die Testphase kann jederzeit manuell beendet werden, um die reguläre Abrechnung zu starten. Während der Testphase wird keine Rechnung erstellt. Stelle sicher, dass eine gültige Zahlungsmethode hinterlegt ist, bevor die Testphase endet. ## Freie Einheiten Ist ein Produkt zum Abo hinzugefügt, welches freien Einheiten im Preis definiert hat, werden diese von der Gesamtmenge dieses Produktes abgezogen. **Beispiel: Abo Plan M** * Produkt (Benutzer): 10 Stück (angegebene Menge), 5 inklusive (freie Einheiten) = 5 Stück werden pro Einheit berechnet * Produkt (Speicher): 100 GB (angegebene Menge), 50 GB inklusive (freie Einheiten) = 50 GB werden pro Einheit berechnet Ist die angegebene Menge kleiner als die freien Einheiten, wird der Preis auf 0 gesetzt. Die freien Einheiten gelten für die angegebene Abrechnungsperiode. Wird ein Produkt jährlich abgerechnet, gelten die freien Einheiten für das gesamte Jahr. ## Abrechnungsintervalle Preise können in verschiedenen Intervallen abgerechnet werden: | Intervall | Beschreibung | | ------------------- | -------------------------------------- | | **Täglich** | Abrechnung jeden Tag | | **Wöchentlich** | Abrechnung jede Woche | | **Monatlich** | Abrechnung jeden Monat | | **Vierteljährlich** | Abrechnung alle 3 Monate | | **Halbjährlich** | Abrechnung alle 6 Monate | | **Jährlich** | Abrechnung einmal pro Jahr | | **Einmalig** | Einmalige Abrechnung ohne Wiederholung | Bei der Auswahl des Abrechnungsintervalls solltest du berücksichtigen, wie deine Kunden zahlen möchten. Monatliche Abrechnung bietet Flexibilität, jährliche Abrechnung kann Rabatte ermöglichen. ## Vorauszahlung vs Nachzahlung Preise können entweder im Voraus oder im Nachhinein berechnet werden: Der Kunde zahlt zu Beginn der Abrechnungsperiode für den kommenden Zeitraum. **Beispiel:** Am 1. Januar wird für Januar abgerechnet. **Vorteile:** * Sofortiger Zahlungseingang * Geringeres Risiko für Zahlungsausfälle Der Kunde zahlt am Ende der Abrechnungsperiode für den vergangenen Zeitraum. **Beispiel:** Am 1. Februar wird für Januar abgerechnet. **Vorteile:** * Genaue Abrechnung basierend auf tatsächlicher Nutzung * Ideal für nutzungsbasierte Preise Nutzungsbasierte Preise (Metered) werden standardmäßig im Nachhinein abgerechnet, da die genaue Nutzung erst am Ende der Periode bekannt ist. ## Proratierung Proratierung bedeutet die anteilige Berechnung von Preisen bei Änderungen innerhalb einer Abrechnungsperiode. **Wann wird proratiert?** * Beim Hinzufügen eines Produkts mitten in der Abrechnungsperiode * Bei Mengenänderungen (z.B. mehr Benutzer) * Bei Upgrades oder Downgrades **Beispiel:** Ein Kunde fügt am 15. des Monats 5 zusätzliche Benutzer hinzu (10 €/Benutzer/Monat). * Verbleibende Tage im Monat: 15 von 30 * Proratierter Betrag: 5 × 10 € × (15/30) = 25,00 € Die Proratierung kann in den Einstellungen unter [Abrechnung](/guide/tenant/billing) aktiviert oder deaktiviert werden. # Vorausabrechnung vs. Nachgelagert Source: https://docs.fynn.eu/guide/catalogue/pricing-and-billing-timing Wann zahlt der Kunde im Voraus, wann erst danach? Entscheidungshilfe und saubere Modellierung von Mischformen. Fynn unterstützt zwei Abrechnungszeitpunkte: **Vorausabrechnung** (`payInAdvance = true`) und **Nachgelagert** (`payInAdvance = false`). Welcher davon richtig ist, hängt davon ab, ob die abzurechnende Menge zum Periodenstart bereits feststeht. Dieser Artikel richtet sich an Solution Architects und Power‑User, die Preismodelle abbilden. Wenn du nur ein einfaches Abo mit Festpreis konfigurierst, brauchst du nicht weiterzulesen — der Default ist Vorausabrechnung und das ist meistens richtig. *** ## Entscheidungsmatrix | Konstellation | Abrechnungszeitpunkt | Begründung | | ------------------------------------------------------------------------------- | -------------------------------- | ------------------------------------------------- | | Festpreis pro Periode (z.B. „99 €/Monat") | **Vorausabrechnung** | Menge und Preis stehen zum Periodenstart fest | | Mengenpreis mit fester Anzahl Einheiten (z.B. „10 Lizenzen × 8 €/Monat") | **Vorausabrechnung** | Menge ist im Vertrag/Abonnement gesetzt | | Nutzungsbasiert (BillableMetric, z.B. „pro API‑Call") | **Nachgelagert** (erzwungen) | Menge ergibt sich erst aus den Events der Periode | | Staffelpreis ohne Nutzungsmetrik (z.B. „bis 100 Lizenzen 8 €, ab 101 dann 6 €") | **Vorausabrechnung** | Menge bleibt im Abonnement gesetzt | | Einmalige Setup‑Gebühr | **Vorausabrechnung** (`OneTime`) | Wird sofort fällig | Nutzungsbasierte Produkte werden technisch zwingend nachgelagert abgerechnet. Der `Vorausabrechnung`‑Schalter ist im PricePlan‑Editor automatisch gesperrt, sobald das verknüpfte Produkt eine Nutzungsmetrik trägt. Wenn du eine Hybridform brauchst, modellierst du das als zwei Positionen (siehe unten). *** ## Warum Nutzungsbasiert immer nachgelagert ist Eine Nutzungsmetrik wie „Tokens", „API‑Calls" oder „Storage‑GB" aggregiert Ereignisse, die **während** einer Abrechnungsperiode entstehen. Vor Periodenende kennt das System die Summe nicht. Wäre die Vorausabrechnung erlaubt, müsste der Wert geschätzt werden. Das führt zu zwei Problemen, die in der Praxis immer auftreten: 1. **Schätzfehler**: Der Schätzwert weicht von der tatsächlichen Nutzung ab. Die erste Rechnung müsste später korrigiert werden — entweder durch eine Gutschrift oder eine Nachberechnung. Bei vielen Abonnements bedeutet das eine Welle korrigierter Rechnungen mit allem Buchhaltungs‑Overhead. 2. **Falsche Signale an den Kunden**: Eine Rechnung, deren Betrag nicht den tatsächlichen Verbrauch widerspiegelt, untergräbt das Versprechen „du zahlst nur, was du verbrauchst". Deshalb: Nutzung wird gemessen, dann abgerechnet, nie umgekehrt. *** ## Mischformen sauber modellieren Drei gängige Anforderungen werden oft fälschlich als „BillableMetric mit Vorausabrechnung" formuliert. Alle drei lassen sich sauber mit **zwei Abonnementpositionen** abbilden: ### Mindestabnahme + Mehrverbrauch **Anforderung:** „Mindestens 10.000 API‑Calls im Monat sind inklusive und werden monatlich im Voraus berechnet. Was darüber hinausgeht, kostet 0,01 € pro Call und wird am Monatsende abgerechnet." **Modellierung:** * Produkt: „API‑Zugang Standard" * PricePlan: `flat_fee`, **Vorausabrechnung**, 100 €/Monat * Keine Nutzungsmetrik * Produkt: „API‑Calls" mit Nutzungsmetrik (`COUNT` auf Event `api_call`) * PricePlan: `per_unit`, **Nachgelagert**, 0,01 €/Call * **Freikontingent: 10.000 Calls/Monat** im PricePlan Effekt: Der Kunde bekommt am 1. eine Rechnung über 100 € (Grundgebühr). Am Monatsende wird Position 2 abgerechnet — wenn er unter 10.000 Calls geblieben ist, beträgt der Betrag 0 €. Liegt er bei 12.000 Calls, sind das 2.000 × 0,01 € = 20 €. ### Prepaid‑Credits / Volumenpaket **Anforderung:** „Der Kunde kauft ein Paket mit 50.000 Tokens für 200 €. Die Tokens werden verbraucht, dann muss er ein neues Paket kaufen." **Modellierung:** * Produkt: „Token‑Paket 50k" * PricePlan: `OneTime`, **Vorausabrechnung**, 200 € fix * Wird beim Kauf abgerechnet * Produkt: „Token‑Nutzung" mit Nutzungsmetrik (`SUM` auf `tokens_used`) * PricePlan: `per_unit`, **Nachgelagert**, 0 €/Token * **Freikontingent entspricht dem gekauften Paket‑Volumen** * Wenn das Paket aufgebraucht ist, wird über einen Filter oder ein Folge‑Produkt nachgeladen Das Verbrauchs‑Tracking erzeugt also keine eigene Rechnung (Preis ist 0 €), dient aber der Transparenz im Kundenportal („du hast 32.000 von 50.000 Tokens verbraucht"). Ist das Paket aufgebraucht, sendet dein System das nächste „Paket‑gekauft"‑Event und der Zyklus startet neu. ### Geschätzte Abrechnung mit True‑Up **Anforderung:** „Der Kunde zahlt monatlich 500 € im Voraus auf Basis einer Schätzung. Am Quartalsende wird die tatsächliche Nutzung gegengerechnet." **Modellierung:** Diese Variante ist in der Praxis im DACH‑B2B‑SaaS selten und wird in Fynn nicht durch ein Spezial‑Feature unterstützt. Die saubere Abbildung ist: * Produkt: „Service Abschlag" * PricePlan: `flat_fee`, **Vorausabrechnung**, 500 €/Monat * Produkt: „Service Nutzung" mit Nutzungsmetrik * PricePlan: `per_unit`, **Nachgelagert**, quartalsweise Am Quartalsende erzeugst du eine Rechnungskorrektur, die die drei Abschlagsrechnungen (Position 1) mit der Nutzungsrechnung (Position 2) gegenrechnet. Saldo positiv → Nachberechnung, Saldo negativ → Gutschrift. Wenn du diese Variante häufig brauchst, sprich mit uns. Wir haben in der Roadmap einen „Estimated Billing"‑Workflow, der die True‑Up‑Korrektur am Periodenende automatisiert. *** ## Was im Hintergrund passiert Wenn ein Abonnement aktiviert wird, gibt es zwei mögliche Verläufe: **Vorausabrechnung (`payInAdvance = true`):** 1. Subscription‑Start am 1. Mai 2. Sofort wird eine Rechnung für `[1. Mai, 1. Juni)` erzeugt 3. Nächste Abrechnung: 1. Juni für `[1. Juni, 1. Juli)`, etc. **Nachgelagert (`payInAdvance = false`):** 1. Subscription‑Start am 1. Mai 2. **Keine** Rechnung am 1. Mai 3. Während Mai werden Nutzungsereignisse erfasst 4. Am 1. Juni: Rechnung für `[1. Mai, 1. Juni)` mit der aggregierten Mai‑Nutzung 5. Nächste Abrechnung: 1. Juli für `[1. Juni, 1. Juli)`, etc. Beide Modelle laufen über denselben Cron‑Lauf — der Unterschied liegt nur darin, wann der erste Rechnungslauf zündet. *** ## Häufige Fragen Nein. Die Regel gilt produktseitig, nicht kundenseitig. Wenn du für einen Kunden ein anderes Abrechnungsmodell brauchst, modellierst du das über eine separate Abonnementposition mit anderem Produkt. Bei Vorausabrechnung gibt es typischerweise eine anteilige Gutschrift für den ungenutzten Rest. Bei nachgelagerter Abrechnung wird die bis zur Kündigung erfasste Nutzung wie üblich am nächsten Abrechnungstermin in Rechnung gestellt — ohne Sonderbehandlung. Ja. Jede Abonnementposition entscheidet selbst. Eine Position mit Grundgebühr kann im Voraus laufen, während eine zweite Position mit Nutzungsabrechnung nachgelagert läuft. Die Rechnungen erscheinen einfach zu verschiedenen Zeitpunkten. *** ## Verwandte Themen Wie du Events erfasst und aggregierst. Wie die Aggregation in der Abrechnung sichtbar wird. # Produktkategorien Source: https://docs.fynn.eu/guide/catalogue/product-categories Erstelle und verwalte deine Produktkategorien Produktkategorien Fynn ermöglicht es dir, Produktkategorien zu erstellen und zu verwalten, um deine Produkte besser zu organisieren. Produktkategorien helfen dir, ähnliche Produkte zu gruppieren und die Übersichtlichkeit in deinem Katalog zu verbessern. ## Produktkategorien erstellen Um eine neue Produktkategorie zu erstellen, gehe zu [Katalog > Produkte](https://preview.fynn.eu/catalogue/products). Hier kannst du eine neue Kategorie hinzufügen, indem du auf den Button "Neue Kategorie hinzufügen" klickst. ## Produkte zu Kategorien hinzufügen Produkte zu Kategorien hinzufügen Nachdem du eine Kategorie erstellt hast, kannst du Produkte zu dieser Kategorie hinzufügen. Dazu neben der Kategorie auf die drei Punkte klicken und "Produkte zuordnen" auswählen. Du kannst dann die gewünschten Produkte aus deinem Katalog auswählen und sie der Kategorie zuordnen. # Up- & Downgrades Source: https://docs.fynn.eu/guide/catalogue/product-groups Definiere Upgrade- und Downgrade-Pfade für Self-Service Paketwechsel Mit Produktgruppen definierst du, welche Produkte zusammengehören und wie Kunden zwischen ihnen wechseln können. So ermöglichst du Self-Service Upgrades und Downgrades im Kundenbereich. Produktgruppen unterscheiden sich von Produktfamilien: Während Produktfamilien nur zur Strukturierung des Katalogs dienen, steuern Produktgruppen die Wechselmöglichkeiten zwischen Produkten. ## Anwendungsfälle | Szenario | Beschreibung | | ----------------- | ----------------------------------------- | | **Tier-Wechsel** | Kunde wechselt von Starter zu Pro Paket | | **Upgrade** | Kunde bucht ein höherwertiges Paket | | **Downgrade** | Kunde wechselt zu einem günstigeren Paket | | **Mengenwechsel** | Kunde ändert die Anzahl der Lizenzen | *** ## Konzept Eine Produktgruppe besteht aus mehreren **Tiers** (Memberships), die jeweils ein Produkt mit seinen Preisplänen repräsentieren. Die Reihenfolge der Tiers bestimmt die Upgrade-/Downgrade-Richtung. ``` Produktgruppe: "SaaS Pakete" ├── Position 1: Starter (günstigster) ├── Position 2: Pro └── Position 3: Enterprise (teuerster) ``` * **Upgrade**: Wechsel zu einer höheren Position (z.B. Starter → Pro) * **Downgrade**: Wechsel zu einer niedrigeren Position (z.B. Pro → Starter) *** ## Produktgruppe erstellen Navigiere zu **Produkte > Produktgruppen** und klicke auf "Produktgruppe erstellen". Vergib einen Namen wie "SaaS Pakete" oder "Hosting Plans". Füge für jedes Paket ein Tier hinzu: 1. Wähle das **Produkt** (z.B. "Starter Plan") 2. Wähle die **Preispläne** (z.B. "Starter Monatlich", "Starter Jährlich") 3. Konfiguriere **Upgrade/Downgrade-Verhalten** Ordne die Tiers in der gewünschten Reihenfolge an. Die Position bestimmt, was als Upgrade oder Downgrade gilt. ```bash theme={null} curl -X POST "https://coreapi.io/catalogue/product-groups" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_API_KEY" \ -d '{ "name": "SaaS Pakete", "enabled": true, "forceSameBillingInterval": false, "memberships": [ { "product": "/products/starter-uuid", "pricePlans": ["/plans/starter-monthly-uuid"], "position": 1, "upgradeable": true, "downgradeable": false, "changeTiming": "end_of_period", "label": "Starter" }, { "product": "/products/pro-uuid", "pricePlans": ["/plans/pro-monthly-uuid"], "position": 2, "upgradeable": true, "downgradeable": true, "changeTiming": "immediately", "creditType": "pro_rata", "label": "Pro" } ] }' ``` *** ## Tier-Einstellungen Jedes Tier in einer Produktgruppe hat folgende Einstellungen: ### Upgrade & Downgrade | Einstellung | Beschreibung | | ----------------- | ------------------------------------------------ | | **Upgradeable** | Kann zu höheren Positionen gewechselt werden | | **Downgradeable** | Kann zu niedrigeren Positionen gewechselt werden | Das günstigste Paket sollte `upgradeable: true, downgradeable: false` sein, da es kein niedrigeres Paket gibt. ### Wechselzeitpunkt (Change Timing) | Option | Beschreibung | | -------------------------------------- | ------------------------------------------------------------ | | **Sofort** (`immediately`) | Wechsel wird sofort aktiv | | **Zum Periodenende** (`end_of_period`) | Wechsel wird zum Ende der aktuellen Abrechnungsperiode aktiv | ### Gutschrift-Typ (Credit Type) Nur relevant wenn `changeTiming = immediately`: | Option | Beschreibung | | ------------------------------------- | --------------------------------------------- | | **Anteilig** (`pro_rata`) | Gutschrift basierend auf verbleibenden Tagen | | **Vollständig** (`full`) | Vollständige Gutschrift der aktuellen Periode | | **Letzte Rechnung** (`last_invoiced`) | Gutschrift der letzten Rechnung | | **Keine** (`none`) | Keine Gutschrift | *** ## Produktgruppe zuweisen Damit Kunden wechseln können, muss die Produktgruppe einem Abonnement-Artikel zugewiesen werden. **Automatische Zuweisung im Checkout**: Wenn ein Preisplan einer Produktgruppe zugeordnet ist, wird die Produktgruppe bei Abonnements aus dem Checkout automatisch zugewiesen. Eine manuelle Zuweisung ist nur für Abonnements erforderlich, die in der Wallet erstellt wurden. Navigiere zum Abonnement und öffne den Artikel, für den Up-/Downgrades aktiviert werden sollen. Unter "Produktgruppe" wähle die entsprechende Gruppe aus. ```bash theme={null} curl -X PUT "https://coreapi.io/subscription-items/{itemId}/product-group" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_API_KEY" \ -d '{ "productGroupMembership": "membership-uuid" }' ``` *** ## Wechsel durchführen ### Im Kundenbereich Sobald eine Produktgruppe zugewiesen ist, sehen Kunden im Kundenbereich die verfügbaren Wechseloptionen: 1. Kunde öffnet sein Abonnement 2. Klickt auf "Ändern" 3. Wählt das neue Paket und bestätigt 4. Wechsel wird je nach Konfiguration sofort oder zum Periodenende angewendet ### Per API ```bash theme={null} # 1. Verfügbare Optionen abrufen curl -X GET "https://coreapi.io/subscription-items/{itemId}/change-options" \ -H "Authorization: Bearer YOUR_API_KEY" # 2. Wechsel anwenden curl -X POST "https://coreapi.io/product-group-memberships/{membershipId}/apply" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_API_KEY" \ -d '{ "subscriptionItem": "item-uuid", "selectedPricePlan": "price-plan-uuid", "quantity": 1 }' ``` *** ## Einstellungen ### Gleiches Abrechnungsintervall erzwingen Mit `forceSameBillingInterval: true` können Kunden nur zwischen Preisplänen mit gleichem Abrechnungsintervall wechseln. Ein Kunde mit monatlichem Plan sieht dann nur monatliche Optionen. *** ## API Übersicht | Endpoint | Methode | Beschreibung | | -------------------------------------------------------------------------------------------- | ------- | ---------------------------------- | | [`/catalogue/product-groups`](/api-reference/productgroup/get-product-groups) | GET | Alle Produktgruppen abrufen | | [`/catalogue/product-groups`](/api-reference/productgroup/create-product-group) | POST | Neue Produktgruppe erstellen | | [`/catalogue/product-groups/{id}`](/api-reference/productgroup/get-product-group) | GET | Einzelne Produktgruppe abrufen | | [`/catalogue/product-groups/{id}`](/api-reference/productgroup/update-product-group) | PUT | Produktgruppe aktualisieren | | [`/catalogue/product-groups/{id}`](/api-reference/productgroup/delete-product-group) | DELETE | Produktgruppe löschen | | [`/subscription-items/{id}/product-group`](/api-reference/productgroup/assign-product-group) | PUT | Up- & Downgrades aktivieren | | [`/subscription-items/{id}/change-options`](/api-reference/productgroup/get-change-options) | GET | Verfügbare Wechseloptionen abrufen | | [`/product-group-memberships/{id}/apply`](/api-reference/productgroup/apply-membership) | POST | Tier wechseln | *** ## Verwandte Dokumentation Manuelle Übergänge mit Proration Produkte erstellen und verwalten Self-Service für Kunden Upgrades in eigene Apps integrieren # Produkte Source: https://docs.fynn.eu/guide/catalogue/products Erstelle und verwalte deine Produkte ## Produkt hinzufügen Produkt hinzufügen Um ein neues Produkt zu erstellen, gehe zu [Katalog > Produkte](https://preview.fynn.eu/catalogue/products) und klicke auf Produkt hinzufügen. Für ein neues Produkt musst du folgende Informationen angeben: * Name: Der Name des Produkts, der in der Produktliste und in Rechnungen angezeigt wird. * Abrechenbare Einheit: Die Einheit, in der das Produkt abgerechnet wird, z.B. "Stück", "Stunden" oder "Monat". * Steuergruppe: Die Steuergruppe, die für dieses Produkt gilt. Dies ist wichtig für die korrekte Berechnung der Steuern auf Rechnungen. Klicke auf Produkt erstellen, um das Produkt zu erstellen. Das Produkt wird nun in der Produktliste angezeigt und man kann nun die Preise für das Produkt festlegen. ## Produkt archivieren Ein Produkt kann archiviert werden, wenn es nicht mehr benötigt wird oder nicht mehr verfügbar ist. Ist ein Produkt archiviert, kann es nicht mehr für neue Abonnements oder Rechnungen verwendet werden. Archivierte Produkte werden nicht mehr in der Produktliste oder der Produktauswahl angezeigt. Klicke in der Seitenleiste auf [Katalog > Produkte](https://preview.fynn.eu/catalogue/products) und wähle das Produkt aus, das du archivieren möchtest. Klicke auf Archivieren um das Produkt zu archivieren und bestätige die Aktion. Das Produkt wurde erfolgreich archiviert und ist nicht mehr in der Produktliste oder der Produktauswahl verfügbar. Verwende hierfür den [Produkt archivieren](/api-reference/product/archive-a-product) Endpunkt. ```bash theme={null} PUT /catalog/products/{productId}/archive ``` Alternativ kannst du das [Produkt abrufen](/api-reference/product/get-a-product) oder den [Produke über die API aktualisieren](/api-reference/product/update-a-product). # Einheiten Source: https://docs.fynn.eu/guide/catalogue/units Erstelle und verwalte deine Einheiten Einheiten sind Maßeinheiten, die verwendet werden, um Produkte und Dienstleistungen zu quantifizieren. Sie können verschiedene Formen annehmen, wie z.B. Stück, Kilogramm, Liter, Stunden usw. Einheiten ermöglichen es dir, den Preis und die Menge eines Produkts oder einer Dienstleistung genau zu definieren. ## Nutzung von Einheiten Einheiten werden in Fynn für folgende Zwecke genutzt: * Abrechenbare Einheiten: Einheiten werden in abrechenbaren Einheiten referenziert, um die Menge zu quantifizieren, die für die Abrechnung verwendet wird. Zum Beispiel, wenn du eine Dienstleistung anbietest, die pro Stunde abgerechnet wird, kannst du die Einheit `Stunde` verwenden, um die Menge der Stunden zu quantifizieren, die für die Abrechnung verwendet werden. * Abrechnung und Rechnungsstellung: Einheiten werden auch bei der [manuellen Rechnungsstellung](/guide/billing/invoices#manuelle-rechnung-erstellen) verwendet, um die Menge der Positionen auf der Rechnung zu quantifizieren. ## Unterschied zwischen Einheiten und abrechenbaren Einheiten Einheiten und abrechenbare Einheiten sind zwei verschiedene Konzepte in Fynn. Einheiten können nicht direkt für die wiederkehrende Abrechnung verwendet werden. Sie werden nur als Referenz für die Menge verwendet, die in abrechenbaren Einheiten abgerechnet wird. D.h. ein [Preis](/guide/catalogue/prices) wird immer mit einer abrechenbaren Einheiten definiert, nicht mit Einheiten. Solltest du hier Unklarheiten haben, zögere nicht, uns zu kontaktieren: [Termin buchen](https://cal.com/team/fynn/fynn-documentation) ## Einheit erstellen Einheiten können dort erstellt werden, wo ein entsprechendes Dropdown verfügbar ist. Beispielsweise in der ["Neue abrechenbare Einheit" Maske](/guide/catalogue/measurements/introduction#neue-abrechenbare-einheit-erstellen). Oder in der ["Rechnung erstellen" Maske](/guide/billing/invoices#manuelle-rechnung-erstellen). Einheit erstellen Klicke nun auf "Neue Einheit erstellen" und gib den Namen der Einheit ein. Einheit eingeben Klicke auf das "Check"-Symbol, um die Einheit zu speichern. Du kannst die Einheit nun in der Dropdown-Liste auswählen. Verwende hierfür den [Einheit erstellen](/api-reference/unit/create-a-unit) Endpunkt. ```bash theme={null} POST /units ``` Alternativ kannst du die [Einheit abrufen](/api-reference/unit/get-a-unit) oder die [Einheit über die API aktualisieren](/api-reference/unit/update-a-unit). Mehrsprachigkeit
Aktuell kann hierfür nur über die API eine weitere Übersetzung in einer anderen Sprache hinzugefügt werden. Die korrekte Übersetzung erfolgt dann auf der Sprache des Kunden. Sollte die Übersetzung nicht in der entsprechenden Sprache verfügbar sein, wird standardmäßig die deutsche Übersetzung verwendet.
## Einheit bearbeiten Eine Einheit kann nicht über die Web-App bearbeitet werden. Du kannst jedoch die [Einheit über die API aktualisieren](/api-reference/unit/update-a-unit). ## Einheit löschen Eine Einheit kann aktuell nicht gelöscht werden. # Nutzungsereignisse senden Source: https://docs.fynn.eu/guide/catalogue/usage-events-import Sende Nutzungsereignisse über CSV oder die API für nutzungsbasierte Abrechnung Nutzungsereignisse sind die Grundlage für nutzungsbasierte Abrechnung. Es gibt zwei Möglichkeiten, Ereignisse zu senden: über CSV-Dateien oder direkt über die REST API. ## Übersicht | Methode | Verwendung | Limit | | -------------- | ------------------------------ | ------------------------------ | | **CSV Import** | Bulk-Import historischer Daten | Bis zu 10 MB pro Datei | | **API Import** | Echtzeit-Event-Erfassung | Bis zu 1000 Events pro Request | Für einmalige Imports historischer Daten oder Backfill-Szenarien verwende CSV Import. Für kontinuierliche, Echtzeit-Event-Erfassung aus Anwendungen verwende die API. ## CSV Import ### CSV Format Die CSV-Datei muss folgende Spalten enthalten: | Spalte | Typ | Erforderlich | Beschreibung | | ---------------- | -------- | ------------ | --------------------------------------------------- | | `transaction_id` | string | Ja | Eindeutige Transaktions-ID für Idempotenz | | `event_name` | string | Ja | Name des Events (z.B. "api\_call", "storage\_used") | | `timestamp` | ISO 8601 | Ja | Event-Zeitstempel (z.B. "2026-01-13T10:30:00Z") | | `customer_id` | string | Ja | Kunden-Identifier (Fynn-UUID oder `externalId`) | | `properties` | JSON | Ja | Event-Eigenschaften als JSON-Objekt | Die Datei muss im UTF-8 Format vorliegen. Die `properties`-Spalte muss ein gültiges JSON-Objekt enthalten. Maximale Dateigröße: 10 MB. ### Import über die Benutzeroberfläche 1. Navigiere zur Seite **Verbrauchsdaten** 2. Klicke auf das **Aktionen**-Dropdown im Header 3. Wähle **CSV Import** 4. Im Dialog: * Klicke auf den Upload-Bereich oder ziehe eine CSV-Datei hinein * Wähle die CSV-Datei aus * Klicke auf **Importieren** CSV Import Dialog **Nach dem Import:** * Die Events werden asynchron verarbeitet * Die Tabelle wird automatisch aktualisiert * Bei Fehlern wird eine Fehlermeldung angezeigt ### Beispiel CSV ```csv theme={null} transaction_id,event_name,timestamp,customer_id,properties tx-12345,api_call,2026-01-13T10:30:00Z,550e8400-e29b-41d4-a716-446655440000,"{""endpoint"":""/api/v1/users"",""method"":""GET"",""response_time_ms"":145,""status_code"":200}" tx-12346,storage_used,2026-01-13T10:31:00Z,550e8400-e29b-41d4-a716-446655440000,"{""bytes"":1048576,""storage_type"":""database""}" tx-12347,api_call,2026-01-13T10:32:00Z,550e8400-e29b-41d4-a716-446655440000,"{""endpoint"":""/api/v1/products"",""method"":""POST"",""response_time_ms"":234,""status_code"":201}" ``` JSON-Objekte in der `properties`-Spalte müssen mit doppelten Anführungszeichen escaped werden (`""`). ## API Import Nutzungsereignisse können programmatisch über die REST API gesendet werden. Unterstützt einzelne Events oder Batch-Import (bis zu 1000 Events pro Anfrage). ### Authentifizierung Der API-Schlüssel muss im Request-Header übergeben werden: ```http theme={null} Authorization: Bearer YOUR_API_KEY ``` ### Einzelnes Event senden **Endpoint:** `POST /api/usage-events` ```bash theme={null} curl -X POST https://coreapi.io/api/usage-events \ --header "Content-Type: application/json" \ --header "Authorization: Bearer YOUR_API_KEY" \ --data '{ "events": [ { "transactionId": "tx-12345", "eventName": "api_call", "timestamp": "2026-01-13T10:30:00Z", "customerId": "550e8400-e29b-41d4-a716-446655440000", "properties": { "endpoint": "/api/v1/users", "method": "GET", "response_time_ms": 145, "status_code": 200 } } ] }' ``` ### Batch Import Bis zu 1000 Events können in einem Request gesendet werden: ```bash theme={null} curl -X POST https://coreapi.io/api/usage-events \ --header "Content-Type: application/json" \ --header "Authorization: Bearer YOUR_API_KEY" \ --data '{ "events": [ { "transactionId": "tx-12345", "eventName": "api_call", "timestamp": "2026-01-13T10:30:00Z", "customerId": "550e8400-e29b-41d4-a716-446655440000", "properties": { "endpoint": "/api/v1/users", "method": "GET", "response_time_ms": 145, "status_code": 200 } }, { "transactionId": "tx-12346", "eventName": "storage_used", "timestamp": "2026-01-13T10:31:00Z", "customerId": "550e8400-e29b-41d4-a716-446655440000", "properties": { "bytes": 1048576, "storage_type": "database" } } ] }' ``` ### Antwortformat **Erfolgreiche Antwort (202 Accepted):** ```json theme={null} { "ingested": 2, "failed": 0, "errors": [] } ``` **Antwort mit Fehlern:** ```json theme={null} { "ingested": 1, "failed": 1, "errors": [ { "index": 1, "transactionId": "tx-12346", "error": "Invalid customer ID" } ] } ``` **HTTP Status Codes:** | Code | Bedeutung | | ----- | ---------------------------------------------------------- | | `202` | Events wurden akzeptiert (kann teilweise Fehler enthalten) | | `400` | Ungültige Anfrage - Validierungsfehler | | `401` | Nicht autorisiert - Ungültiger API-Schlüssel | ## Event-Struktur ### Erforderliche Felder Jedes Nutzungsereignis muss folgende Felder enthalten: ```typescript theme={null} { transactionId: string; // Eindeutige ID für Idempotenz eventName: string; // Name des Events timestamp: string; // ISO 8601 Zeitstempel customerId: string; // Fynn-UUID oder externalId des Kunden properties: object; // Beliebige Event-Eigenschaften } ``` ### Idempotenz Events mit derselben `transactionId` werden nur einmal verarbeitet. Bei wiederholtem Senden wird das bereits existierende Event zurückgegeben (HTTP 200 statt 201). Verwende eindeutige, deterministische Transaction IDs. Beispiel: UUID oder `${customerId}-${timestamp}-${eventName}` ### Properties Die `properties` können beliebige JSON-Objekte enthalten. Typische Beispiele: **API Call Event:** ```json theme={null} { "endpoint": "/api/v1/users", "method": "GET", "response_time_ms": 145, "status_code": 200 } ``` **Storage Event:** ```json theme={null} { "bytes": 1048576, "storage_type": "database", "region": "eu-central-1" } ``` **Transaction Event:** ```json theme={null} { "amount": 99.99, "currency": "EUR", "transaction_type": "purchase" } ``` ## Best Practices ### Timestamps Verwende immer UTC-Zeitstempel im ISO 8601 Format. ### Batch-Größe Für optimale Performance: * **Kleine Batches**: 10-100 Events für Echtzeit-Erfassung * **Große Batches**: 500-1000 Events für Bulk-Import * **Vermeide**: Sehr kleine Batches (\< 10) bei hohem Volumen ### Rate Limiting Respektiere Rate Limits: * **Empfohlen**: Maximal 10 Requests pro Sekunde * **Burst**: Kurzzeitig bis zu 50 Requests pro Sekunde * **Vermeide**: Längerfristige Überschreitung der Limits ## Fehlerbehebung ### CSV Import schlägt fehl **Problem:** "Ungültiges CSV-Format" **Lösung:** 1. Prüfe, ob alle erforderlichen Spalten vorhanden sind 2. Stelle sicher, dass die Datei UTF-8 kodiert ist 3. Validiere JSON in der `properties`-Spalte 4. Prüfe, ob Anführungszeichen korrekt escaped sind **Problem:** "Datei zu groß" **Lösung:** * Teile die CSV-Datei in kleinere Dateien auf (max. 10 MB) * Importiere die Dateien nacheinander ### API Import Fehler **Problem:** `401 Unauthorized` **Lösung:** * Prüfe, ob der API-Schlüssel korrekt im Header übergeben wird * Stelle sicher, dass der API-Schlüssel aktiv ist * Prüfe die Berechtigungen des API-Schlüssels **Problem:** `400 Bad Request` **Lösung:** * Validiere die Event-Struktur * Prüfe, ob alle erforderlichen Felder vorhanden sind * Stelle sicher, dass `customerId` eine gültige UUID oder `externalId` ist * Prüfe das `timestamp`-Format (ISO 8601) **Problem:** Events werden nicht angezeigt **Lösung:** 1. Prüfe die Antwort auf Fehler (`errors` Array) 2. Validiere `transactionId` (möglicherweise Duplikat) 3. Prüfe Filter in der Events-Tabelle 4. Warte kurz, da Events asynchron verarbeitet werden ## Verwandte Dokumentation * [Abrechenbare Einheiten verwalten](/guide/catalogue/measurements/introduction) * [Nutzungsbasierte Abrechnung](/guide/subscriptions/introduction) * [API Referenz - Nutzungsereignisse](/api-reference/usage-events) # Checkout Link Source: https://docs.fynn.eu/guide/checkout/checkout-links Lerne wie du einen Checkout Link erstellst und an deine Kunden sendest. Mit einem Checkout Link kannst du einen vorkonfigurierten Warenkorb für ein Produkt erstellen und an deine Kunden senden. Der Kunde kann dann direkt zur Kasse gehen und den Kauf abschließen. ## Checkout Link erstellen Wähle das Produkt in deinem Produkt-Katalog aus, erstelle einen Preis wenn noch nicht geschehen, und klicke auf den Button "Checkout Link erstellen". Wähle unter "Nach Abschluss" eines der Optionen aus, um festzulegen, was nach dem Kauf passieren soll. Nach Bestellabschluss einrichten * **Standard-Bestätigungsseite**: Der Kunde wird auf die Standard-Bestätigungsseite weitergeleitet, und erhält eine Übersicht über seine Bestellung und die dazugehörige Rechnung. * **Benutzerdefinierte Weiterleitung**: Der Kunde wird auf eine von dir festgelegte URL weitergeleitet. * **Benutzerdefinierte Bestätigungsnachricht**: Der Kunde wird auf die Standard-Bestätigungsseite weitergeleitet, und erhält eine von dir festgelegte Bestätigungsnachricht angezeigt. Bei der Verwendung einer **benutzerdefinierten Weiterleitung** kannst du die URL mit Platzhaltern versehen, die durch URL Parameter ersetzt werden. Weiteres findest du unter [Metadaten hinzufügen](#metadaten-hinzufuegen). **Zurück zum Anbieter-Button anzeigen**: Aktiviere diese Option, wenn du möchtest, dass der Kunde nach dem Kauf auf der Standard-Bestätigungsseite einen Button sieht, um zurück zu deinem Anbieter zu gelangen. ### Rabattcodes erlauben Unter "Weitere Optionen" kannst du festlegen, ob der Kunde einen Rabattcode eingeben kann. Aktiviere diese Option, wenn du möchtest, dass der Kunde einen Rabattcode eingeben kann. Andernfalls wird das Feld ausgeblendet. ### Testzeitraum festlegen Unter "Weitere Optionen" kannst du für wiederkehrende Produkte festlegen, ob ein Testzeitraum für das Produkt gelten soll. Aktiviere diese Option, wenn du möchtest, dass der Kunde das Produkt vor dem Kauf testen kann. Der Betrag wird erst nach Ablauf des Testzeitraums fällig. Wenn im Preis der Testzeitraum über Testphase erlauben ausgeschlossen ist, wird diese Option ignoriert. ### Laufzeiten festlegen Unter "Weitere Optionen" kannst du für wiederkehrende Produkte festlegen, welche Vertrags- & Kündigungszeiträume für das Produkt gelten. Die Laufzeiten werden anschließend in das Abonnement überführt. Für einmalige Produkte ist diese Option ohne Bedeutung. Solltest du keine Laufzeiten festlegen, wird als Vertragslaufzeit die Abrechnungsperiode verwendet und als Kündigungsfrist 1 Tag. ### Unternehmensangabe erzwingen Unter "Weitere Optionen" kannst du festlegen, ob der Kunde verpflichtet ist, eine Unternehmensangabe zu machen. So kannst du sicherstellen, dass du nur an Unternehmen verkaufst. Hierfür aktiviere die Option "Unternehmensangabe erzwingen". ### Menge veränderbar machen Unter "Weitere Optionen" kannst du festlegen, ob der Kunde die Menge des Produkts im Warenkorb nachträglich verändern kann. Aktiviere diese Option, indem du die Checkbox "Menge veränderbar" aktivierst. Hiermit kann ein Produkt nicht aus dem Warenkorb entfernt werden, sondern nur die Menge verändert werden. ## Metadaten hinzufügen Du kannst Metadaten an den Checkout Link anhängen, um zusätzliche Informationen zu übergeben. Diese Metadaten werden: * als Weiterleitungsparameter an die benutzerdefinierte Weiterleitung angehängt * als Platzhalter in der benutzerdefinierten Weiterleitung ersetzt * im Webhook als `metadata`-Feld übergeben ### Metadaten anhängen Um Metadaten an den Checkout Link anzuhängen, füge sie als URL-Parameter hinzu, z.B. `https://fynn.coreapi.io/checkout-link/xxxxxxxx?metadata[key]=value&metadata[key2]=value2`. Es ist zudem möglich ein mehrdimensionales Array zu übergeben, indem du den Schlüssel mit eckigen Klammern umschließt, z.B. `metadata[key][subkey]=value`. ### Platzhalter in der benutzerdefinierten Weiterleitung Du kannst Platzhalter in der benutzerdefinierten Weiterleitung verwenden, die durch Metadaten ersetzt werden. Um ein angegebenes Metadatum in der benutzerdefinierten Weiterleitung zu verwenden, füge es in geschweiften Klammern hinzu, z.B. `{{metadataKey}}`. Wenn du eine Mandanten-fähige Anwendung betreibst, und bspw. bei Weiterleitung auf eine benutzerdefinierte URL des Mandanten weiterleiten möchtest, kannst du die Mandanten-ID als Metadatum an den Checkout Link anhängen und als Platzhalter in der benutzerdefinierten Weiterleitung verwenden. Beispiel URL: `https://{{mandantId}}.example.com/checkout-success` Beispiel Checkout-URL: `https://fynn.coreapi.io/checkout-link/xxxxxx?metadata[mandantId]=acmegmbh` ### Webhooks Die Metadaten werden im Webhook als `metadata`-Feld übergeben. ```json theme={null} { "metadata": { "key": "value", "key2": "value2" } } ``` ## Checkout Session erstellen Standardmäßig wird bei Verwendung des Checkout Links eine neue Checkout Session erstellt. Es kann jedoch sinnvoll sein, dass nur eine Checkout Session erstellt wird, wenn du: * mehrere Produkte in einem Warenkorb bündeln möchtest * den Checkout Link mehrfach verwenden möchtest Um eine Checkout Session zu erstellen, füge den Parameter `session=true` hinzu, z.B. `https://my-tenant.coreapi.io/checkout-link/xxxxxxxx?session=true`. Wenn eine Checkout Session erstellt wurde und ein Checkout Link ohne `session=true` aufgerufen wird, wird eine einmalige unabhängige Checkout Session erstellt. Die Checkout Session ist 24 Stunden gültig. Nach Ablauf dieser Zeit wird der Warenkorb geleert. ### Checkout Session abrufen Um die Checkout Session abzurufen, ohne ein weiteres Produkt hinzuzufügen, rufe folgende API-Route auf: `https://[tenant-username].coreapi.io/public/checkout/cart/current`. Ersetze `[tenant-username]` durch deinen Tenant-Namen. Anschließend wird zur aktuellen Checkout Session weitergeleitet. # Provisionen & Rückforderungen Source: https://docs.fynn.eu/guide/commissions/earnings Provisionen nachverfolgen, genehmigen und Rückforderungen bei Stornierungen verstehen. ## Übersicht Provisionen werden automatisch berechnet, wenn eine Rechnung finalisiert oder bezahlt wird, je nach Konfiguration des [Provisionsplans](/guide/commissions/plans). Jede Provision ist einer konkreten Rechnungsposition zugeordnet und enthält den vollständigen Berechnungskontext. Provisionsübersicht *** ## Provisions-Status | Status | Bedeutung | Nächste Aktion | | -------------------- | ------------------------------------------------------------ | -------------------------- | | **Offen** | Provision wurde berechnet, wartet auf Prüfung | Genehmigen oder Stornieren | | **Genehmigt** | Provision wurde geprüft und freigegeben | In Auszahlung aufnehmen | | **Ausgezahlt** | Provision wurde in einer Auszahlung berücksichtigt | Abgeschlossen | | **Storniert** | Provision wurde manuell oder durch Rückforderung storniert | Abgeschlossen | | **Nicht berechtigt** | Provision konnte nicht berechnet werden (Berechtigung fehlt) | Grund prüfen | ### Nicht berechtigt: Gründe Wenn eine Provision den Status "Nicht berechtigt" erhält, liegt einer der folgenden Gründe vor: | Grund | Beschreibung | | ---------------------------------- | --------------------------------------------------------------------------------------- | | **Auslöser stimmt nicht überein** | Die Rechnung wurde finalisiert, aber der Plan erwartet Zahlungseingang (oder umgekehrt) | | **Kein Deal verknüpft** | Der Plan erfordert einen HubSpot-Deal, aber die Rechnung hat keinen | | **Außerhalb des Geltungsbereichs** | Die Rechnung liegt außerhalb des ersten Vertragszeitraums | | **Plan inaktiv** | Der Provisionsplan ist deaktiviert | | **Kunde ausgeschlossen** | Der Kunde ist auf der Ausschlussliste | *** ## Provisionen prüfen und genehmigen Navigiere zu **Provisionen > Provisionen**. Nutze die Filter, um nach Zeitraum, Mitarbeiter oder Status zu filtern. Klicke auf eine Provision, um den vollständigen Kontext zu sehen: Provisions-Detail * Rechnungsnummer und -position * Kunde und Kundennummer * Provisionssatz und Berechnungsbasis * Abonnement und Vertragszeitraum * Verknüpfter HubSpot-Deal (falls vorhanden) Wähle eine oder mehrere Provisionen per Mehrfach-Auswahl aus: * **Freigeben**: Provision wird für die Auszahlung freigegeben * **Stornieren**: Provision wird mit Begründung storniert Nutze die Gruppierung nach **Vertriebsmitarbeiter**, **Kunde**, **Rechnung** oder **Deal**, um Provisionen effizient zu prüfen. *** ## Rückforderungen (Clawbacks) Wenn eine Rechnung storniert oder gutgeschrieben wird, erstellt Fynn automatisch eine Rückforderung. Es wird kein manueller Eingriff benötigt. ### Wie Rückforderungen funktionieren ``` Rechnung #2024-001 erstellt └── Provision: +150,00 € (Original) Rechnung #2024-001 vollständig storniert └── Rückforderung: -150,00 € (Clawback) ═══════════════════════════════ Effektive Provision: 0,00 € ``` ### Teilweise Gutschriften Bei anteiligen Gutschriften wird die Rückforderung proportional berechnet: ``` Rechnung #2024-002 über 1.000,00 € netto └── Provision: 100,00 € (10 %) Teilgutschrift über 400,00 € netto └── Rückforderung: -40,00 € (10 % von 400 €) ═══════════════════════════════ Effektive Provision: 60,00 € ``` ### Rückforderung bei bereits ausgezahlten Provisionen Wurde die Provision bereits ausgezahlt, wird eine negative Rückforderung erstellt. Diese wird mit der nächsten Auszahlung verrechnet. Rückforderungen erscheinen als eigener Typ "Rückforderung" in der Provisionsübersicht und sind klar von regulären Provisionen unterscheidbar. *** ## Provisions-Typen | Typ | Beschreibung | | ----------------- | -------------------------------------------------------- | | **Original** | Reguläre Provision aus einer Rechnung | | **Rückforderung** | Automatische Korrektur bei Stornierung oder Gutschrift | | **Nachbuchung** | Manuell erstellte Korrektur (z.B. für externe Dokumente) | # Excel-Exporte Source: https://docs.fynn.eu/guide/commissions/exports Provisionen, Auszahlungen und Deal-Daten als Excel-Dateien exportieren. ## Übersicht Fynn bietet drei verschiedene Excel-Exporte für Provisionen. Alle Exporte werden als XLSX-Datei heruntergeladen und enthalten mehrere Tabellenblätter mit strukturierten Daten. | Export | Wo zu finden | Tabellenblätter | | ----------------------- | ------------------------------------------- | --------------- | | **Einzelne Auszahlung** | Auszahlungsdetail > **Excel exportieren** | 2 Blätter | | **Alle Auszahlungen** | Auszahlungsübersicht > **Alle exportieren** | 2 Blätter | | **Deal-Provisionen** | Provisionen > Deals > **Excel exportieren** | 3 Blätter | *** ## Einzelne Auszahlung exportieren Öffne eine Auszahlung und klicke auf **Excel exportieren**. Die Datei enthält zwei Tabellenblätter: ### Blatt 1: Zusammenfassung | Spalte | Beschreibung | | ------------------ | --------------------------------- | | Auszahlung-ID | Eindeutige Kennung | | Vertriebler | Name des Vertriebsmitarbeiters | | E-Mail | E-Mail-Adresse des Mitarbeiters | | Status | Entwurf, Freigegeben oder Bezahlt | | Betrag | Gesamtbetrag der Auszahlung | | Anzahl Provisionen | Anzahl enthaltener Provisionen | | Notiz | Optionale Notiz aus der Freigabe | | Erstellt am | Datum der Erstellung | | Genehmigt am | Datum der Freigabe | | Ausgezahlt am | Datum der Zahlung | ### Blatt 2: Provisionen | Spalte | Beschreibung | | ------------------ | ---------------------------------------- | | Kunde | Kundenname | | Rechnungsnummer | Zugehörige Rechnungsnummer | | Rechnungsdatum | Datum der Rechnung | | Basisbetrag | Netto- oder Bruttobetrag (je nach Plan) | | Provisionssatz (%) | Angewendeter Prozentsatz | | Provisionsbetrag | Berechneter Provisionsbetrag | | Typ | Original, Rückforderung oder Nachbuchung | | Berechnet am | Zeitpunkt der Berechnung | *** ## Alle Auszahlungen exportieren In der Auszahlungsübersicht klicke auf **Alle exportieren**. Diese Datei enthält zwei Blätter mit allen Auszahlungen und deren Provisionen. ### Blatt 1: Auszahlungen Alle Felder aus der Einzelauszahlung, erweitert um: | Spalte | Beschreibung | | --------------------- | -------------------------- | | Währung | Währung der Auszahlung | | Ziel-Auszahlungsdatum | Geplantes Auszahlungsdatum | ### Blatt 2: Provisionen Alle Provisionen aller Auszahlungen, erweitert um: | Spalte | Beschreibung | | ------------- | ----------------------------------- | | Auszahlung-ID | Zuordnung zur Auszahlung | | Vertriebler | Name des Vertriebsmitarbeiters | | Deal | Name des verknüpften HubSpot-Deals | | HubSpot-Link | Direktlink zum Deal in HubSpot | | Kundennummer | Kundennummer des zugehörigen Kunden | | Währung | Währung der Provision | *** ## Deal-Provisionen exportieren Unter **Provisionen > Deals** klicke auf **Excel exportieren**. Die Datei enthält drei Blätter und verknüpft Deal-Daten mit Rechnungspositionen und Provisionen. Der Deal-Export kann nach Vertriebsmitarbeiter, Deal-Phase und Suchbegriff gefiltert werden. Die Filter werden auf den Export angewendet. ### Blatt 1: Deals | Spalte | Beschreibung | | ---------------------------- | ----------------------------------- | | Deal-ID | HubSpot Deal-Kennung | | Deal | Deal-Name | | Kunde | Zugeordneter Kundenname | | Kundennummer | Kundennummer | | Phase | Open, Won oder Lost | | Inhaber | Deal-Inhaber (Vertriebsmitarbeiter) | | TCV (Netto) | Total Contract Value | | Fakturiert (Netto) | Bereits fakturierter Nettobetrag | | Fakturiert (Brutto) | Bereits fakturierter Bruttobetrag | | Noch zu fakturieren | Offener Betrag | | Fakturierungsfortschritt (%) | Prozentualer Fortschritt | | Abschlussdatum | Datum des Deal-Abschlusses | ### Blatt 2: Rechnungspositionen | Spalte | Beschreibung | | --------------- | --------------------------- | | Deal | Deal-Name | | Abo-Nummer | Zugehörige Abonnementnummer | | Abo-Name | Name des Abonnements | | Rechnungsnummer | Rechnungsnummer | | Rechnungsstatus | Status der Rechnung | | Rechnungsdatum | Datum der Rechnung | | Produkt | Produktbezeichnung | | Netto | Nettobetrag der Position | | Brutto | Bruttobetrag der Position | | Währung | Währung | ### Blatt 3: Provisionen | Spalte | Beschreibung | | ------------------ | ---------------------------------------- | | Deal | Deal-Name | | Vertriebler | Name des Vertriebsmitarbeiters | | E-Mail | E-Mail-Adresse des Mitarbeiters | | Kunde | Kundenname | | Rechnungsnummer | Zugehörige Rechnungsnummer | | Rechnungsdatum | Datum der Rechnung | | Basisbetrag | Berechnungsgrundlage | | Provisionssatz (%) | Angewendeter Prozentsatz | | Provisionsbetrag | Berechneter Provisionsbetrag | | Währung | Währung | | Typ | Original, Rückforderung oder Nachbuchung | | Status | Status der Provision | | Berechnet am | Zeitpunkt der Berechnung | *** ## Geplante Exporte DATEV LODAS und Personio Exporte sind in Planung und werden in einem zukünftigen Update verfügbar sein. # Provisionen Source: https://docs.fynn.eu/guide/commissions/introduction Vertriebsprovisionen automatisch berechnen, nachverfolgen und auszahlen, direkt aus deinen Rechnungsdaten. ## Warum Provisionen in Fynn? Vertriebsprovisionen werden häufig in Excel-Tabellen berechnet: manuell, fehleranfällig und ohne Verbindung zu den tatsächlichen Rechnungsdaten. Das führt zu Streitigkeiten, verspäteten Auszahlungen und einem Kontrollverlust über die Vertriebskosten. Fynn berechnet Provisionen automatisch auf Basis deiner Rechnungen. Jede Buchung ist nachvollziehbar, Rückforderungen bei Stornierungen werden automatisch erstellt und Auszahlungen lassen sich als Excel-Datei exportieren. Provisionen werden bei Rechnungsstellung oder Zahlungseingang berechnet, ohne manuellen Aufwand. Bei Stornierungen oder Gutschriften werden Provisionen automatisch anteilig zurückgefordert. Auszahlungen und Deal-Provisionen als detaillierte Excel-Dateien exportieren. DATEV LODAS und Personio in Planung. *** ## Typische Anwendungsfälle Dein Vertriebsteam erhält eine feste Provision pro abgeschlossenem Kunden, z.B. 10 % auf den Nettoumsatz aller Rechnungen. Jeder Vertriebsmitarbeiter ist einem oder mehreren Kunden zugeordnet. **So setzt du es um:** * Erstelle einen Provisionsplan mit 10 % auf Nettobasis * Lege Vertriebsmitarbeiter an und weise ihnen Kunden zu * Provisionen werden automatisch bei jeder Rechnung berechnet Vertrieb wird nur für die initiale Kundengewinnung vergütet, nicht für Verlängerungen. Die Provision wird nur auf Rechnungen im ersten Vertragszeitraum berechnet. **So setzt du es um:** * Provisionsplan mit Scope "Nur erster Vertragszeitraum" erstellen * Rechnungen nach Ablauf der ersten Vertragsperiode generieren keine Provision mehr Nicht jedes Produkt hat die gleiche Marge. Premium-Produkte erhalten eine höhere Provision, Einstiegsprodukte eine niedrigere. **So setzt du es um:** * Provisionsplan mit Basisprozentsatz anlegen (z.B. 5 %) * Produktregeln hinzufügen, die den Satz pro Produkt überschreiben (z.B. 15 % für "Enterprise Plan") Provisionen sollen nur gezahlt werden, wenn der Kunde über einen HubSpot-Deal gewonnen wurde, nicht für Bestandskunden oder organische Anmeldungen. **So setzt du es um:** * "Deal erforderlich" im Provisionsplan aktivieren * Nur Rechnungen mit verknüpftem HubSpot-Deal generieren Provisionen Externe Partner oder Reseller erhalten Provisionen auf vermittelte Kunden. Auszahlungen erfolgen erst ab einem Mindestbetrag je Vertriebsmitarbeiter. **So setzt du es um:** * Partner als Vertriebsmitarbeiter anlegen * Mindestauszahlung oder Mindestumsatz pro Monat im Plan definieren (z.B. 50 € Mindestauszahlung je Vertriebsmitarbeiter) * Auszahlungen monatlich prüfen und freigeben *** ## So funktioniert es Definiere Prozentsatz, Berechnungsbasis (Netto/Brutto), Auslöser und Geltungsbereich. Optional: Produktregeln mit abweichenden Sätzen. Manuell anlegen oder aus HubSpot / Xentral importieren. Jedem Mitarbeiter wird ein Standard-Provisionsplan zugewiesen. Kunden einzeln oder per Mehrfach-Auswahl einem Vertriebsmitarbeiter zuordnen. Optional mit abweichendem Plan pro Zuweisung. Bei Rechnungsstellung oder Zahlungseingang wird die Provision automatisch berechnet. Bei Stornierungen erfolgt die Rückforderung automatisch. Offene Provisionen einzeln oder per Mehrfach-Auswahl prüfen und freigeben. Freigegebene Provisionen nach Monat und Mitarbeiter gruppiert in eine Auszahlung bündeln. Als Excel-Datei mit Zusammenfassung und Einzelpositionen exportieren. *** ## Vorteile gegenüber manueller Berechnung | Aspekt | Manuell (Excel) | Fynn Provisionen | | --------------- | ------------------------- | ------------------------------------------------- | | Berechnung | Manuell pro Rechnung | Automatisch bei Rechnungsstellung | | Stornierungen | Manuelle Korrektur nötig | Automatische Rückforderung | | Transparenz | Keine Nachvollziehbarkeit | Jede Provision mit Rechnungs- und Kundenbezug | | Auszahlung | Manuelle Überweisung | Strukturierter Excel-Export mit Freigabe-Workflow | | Produktregeln | Komplexe IF-Formeln | Regelkonfiguration pro Produkt im Plan | | CRM-Verknüpfung | Nicht vorhanden | Automatische HubSpot-Deal-Zuordnung | | Audit-Trail | Keine Historie | Vollständige Änderungshistorie pro Provision | *** ## Erste Schritte Kontaktiere uns, um das Provisionssystem für deine Organisation freizuschalten. Nach der Aktivierung findest du unter **Provisionen** den Einrichtungsassistenten, der dich in 5 Schritten durch die Konfiguration führt. Einrichtungsassistent Nach der Einrichtung werden Provisionen automatisch bei jeder neuen Rechnung berechnet. Folge den weiteren Anleitungen für Details zu [Provisionsplänen](/guide/commissions/plans), [Vertriebsmitarbeitern](/guide/commissions/sales-reps) und [Auszahlungen](/guide/commissions/payouts). # Auszahlungen Source: https://docs.fynn.eu/guide/commissions/payouts Genehmigte Provisionen in Auszahlungen bündeln, freigeben und als Excel exportieren. ## Übersicht Auszahlungen bündeln genehmigte Provisionen pro Vertriebsmitarbeiter und Monat. Nach der Freigabe können sie als Excel-Datei exportiert werden. Auszahlungsübersicht *** ## Auszahlung erstellen Navigiere zu **Provisionen > Auszahlungen** und klicke auf **Auszahlung erstellen**. Auszahlung erstellen Wähle die Monate und Vertriebsmitarbeiter aus, für die eine Auszahlung erstellt werden soll. Das System zeigt die Summe der genehmigten Provisionen pro Auswahl. Die Auszahlung wird als **Entwurf** erstellt. Alle enthaltenen Provisionen werden mit der Auszahlung verknüpft. Nur **genehmigte** Provisionen werden in eine Auszahlung aufgenommen. Offene oder stornierte Provisionen bleiben unberücksichtigt. *** ## Auszahlungsschwellen Im [Provisionsplan](/guide/commissions/plans) kannst du zwei monatliche Grenzen je Vertriebsmitarbeiter setzen. Beide gelten pro Plan und Kalendermonat, immer über alle Kunden eines Vertriebsmitarbeiters zusammen. **Mindestauszahlung pro Vertriebsmitarbeiter** Provisionen werden erst in eine Auszahlung aufgenommen, wenn die Provisionssumme eines Vertriebsmitarbeiters im Monat diese Grenze erreicht. * Mindestauszahlung: 50 € Provision * Vertriebsmitarbeiter A: 75 € Provision im Monat → wird aufgenommen * Vertriebsmitarbeiter B: 30 € Provision im Monat → bleibt zurückgehalten **Mindestumsatz pro Monat** Erreicht ein Vertriebsmitarbeiter den festgelegten Umsatz im Monat nicht, wird für diesen Monat keine Provision ausgezahlt. Wird die Grenze erreicht, wird der komplette Umsatz provisioniert. So belohnst du das Erreichen von Monatszielen. * Mindestumsatz: 1.000 € Umsatz * Vertriebsmitarbeiter A: 1.500 € Umsatz im Monat → alle Provisionen werden aufgenommen * Vertriebsmitarbeiter B: 600 € Umsatz im Monat → keine Provision für den Monat Sind beide Grenzen gesetzt, muss ein Monat beide erreichen, damit er ausgezahlt wird. Provisionen unterhalb einer Schwelle gehen nicht verloren. Sie bleiben im Status "Genehmigt" und werden aufgenommen, sobald die Grenze in einem zukünftigen Monat erreicht wird. *** ## Auszahlungs-Workflow Auszahlung Detail | Status | Beschreibung | Aktionen | | --------------- | ----------------------------------------------------- | ---------------------- | | **Entwurf** | Auszahlung wurde erstellt, kann noch angepasst werden | Freigeben oder Löschen | | **Freigegeben** | Auszahlung wurde geprüft und zur Zahlung freigegeben | Als bezahlt markieren | | **Bezahlt** | Auszahlung wurde durchgeführt | Abgeschlossen | ### Freigeben Öffne die Auszahlung und prüfe die enthaltenen Provisionen, Beträge und den Vertriebsmitarbeiter. Klicke auf **Freigeben**. Optional kannst du ein Zieldatum und eine Notiz hinterlegen. Die Freigabe wird mit Zeitstempel und dem freigebenden Benutzer protokolliert. ### Als bezahlt markieren Sobald die Auszahlung tatsächlich überwiesen wurde: Klicke auf **Als bezahlt markieren**. Alle enthaltenen Provisionen werden auf den Status "Ausgezahlt" gesetzt. Einmal als bezahlt markierte Auszahlungen können nicht rückgängig gemacht werden. Korrekturen erfolgen über Rückforderungen in der nächsten Auszahlung. *** ## Exporte Auszahlungen und Provisionen können als Excel-Dateien exportiert werden. Alle verfügbaren Exporte mit den enthaltenen Spalten und Tabellenblättern findest du unter [Excel-Exporte](/guide/commissions/exports). # Provisionspläne Source: https://docs.fynn.eu/guide/commissions/plans Provisionspläne definieren, wie Provisionen berechnet werden: flexible Sätze, Produktregeln und Geltungsbereiche. ## Übersicht Ein Provisionsplan definiert die Berechnungslogik für Vertriebsprovisionen. Du kannst mehrere Pläne für unterschiedliche Vertriebsstrukturen erstellen, z.B. einen Plan für das Neukundengeschäft und einen für Bestandskunden. Provisionsplan konfigurieren *** ## Plan erstellen Navigiere zu **Provisionen > Aktionen > Einstellungen > Pläne** und klicke auf **Neuer Plan**. Konfiguriere die Berechnungsparameter: | Parameter | Beschreibung | | ------------------- | ----------------------------------------------------------------------------------------- | | **Name** | Bezeichnung des Plans (z.B. "Neukundenvertrieb 10 %") | | **Prozentsatz** | Basisprovision in Prozent (z.B. 10 %) | | **Basis** | Berechnung auf **Netto** oder **Brutto**-Betrag der Rechnungspositionen | | **Auslöser** | Wann die Provision berechnet wird: bei **Rechnungsstellung** oder bei **Zahlungseingang** | | **Geltungsbereich** | Für **alle Rechnungen** oder nur den **ersten Vertragszeitraum** | Über den Bereich **Produktregeln** kannst du den Provisionssatz pro Produkt überschreiben. Mehr dazu im Abschnitt [Produktregeln](#produktregeln). * **Deal erforderlich**: Nur Rechnungen mit verknüpftem HubSpot-Deal generieren Provisionen * **Mindestauszahlung pro Vertriebsmitarbeiter**: Erst ab dieser monatlichen Provisionssumme je Vertriebsmitarbeiter wird ausgezahlt. Bleibt die Summe darunter, wird der ganze Monat zurückgehalten * **Mindestumsatz pro Monat**: Erreicht ein Vertriebsmitarbeiter diesen Umsatz im Monat nicht, gibt es für den gesamten Monat keine Provision. Wird die Grenze erreicht, wird der komplette Umsatz provisioniert Der Plan ist sofort aktiv und wird bei neuen Rechnungen für zugewiesene Kunden angewendet. ```bash theme={null} POST /api/commissions/plans { "name": "Neukundenvertrieb 10 %", "percentage": 0.10, "basisType": "net", "triggerEvent": "invoice_finalized", "scope": "first_contract_period", "requireDeal": false, "payoutThresholdAmount": { "amount": 0, "currency": "EUR", "precision": 2 }, "monthlyRevenueThreshold": { "amount": 0, "currency": "EUR", "precision": 2 }, "rules": [ { "externalProductReference": "enterprise-plan", "percentage": 0.20, "priority": 1 } ] } ``` *** ## Auslöser: Rechnungsstellung vs. Zahlungseingang | Auslöser | Wann berechnet | Empfohlen für | | --------------------- | --------------------------------------------- | --------------------------------------------------------- | | **Rechnungsstellung** | Sobald die Rechnung finalisiert wird | Schnelle Sichtbarkeit, wenn Zahlungsrisiko gering ist | | **Zahlungseingang** | Sobald die Rechnung als bezahlt markiert wird | Konservativ: Provision erst bei tatsächlichem Geldeingang | Der Auslöser bestimmt nur, **wann** die Provision berechnet wird. Die Auszahlung erfolgt in beiden Fällen erst nach manueller Freigabe. *** ## Geltungsbereich | Scope | Beschreibung | Anwendungsfall | | --------------------------- | ----------------------------------------------------------------- | ------------------------------------------------------ | | **Alle Rechnungen** | Provision auf jede Rechnung des zugewiesenen Kunden | Laufende Vertriebsprovision (z.B. Reseller, Partner) | | **Erster Vertragszeitraum** | Provision nur auf Rechnungen innerhalb der ersten Vertragsperiode | Neukundenvergütung, keine Provision auf Verlängerungen | Der erste Vertragszeitraum wird automatisch aus dem Abonnement ermittelt. Rechnungen, deren Leistungszeitraum nach dem Ende der ersten Vertragsperiode liegt, generieren keine Provision. *** ## Produktregeln Nicht jedes Produkt hat die gleiche Marge. Beim Erstellen oder Bearbeiten eines Plans kannst du Produktregeln definieren, die den Basisprozentsatz für bestimmte Produkte überschreiben. ### Beispiel | Produkt | Basisprovision | Produktregel | Effektiver Satz | | ------------------ | -------------- | ------------ | ------------------------- | | Starter Plan | 10 % | - | 10 % | | Professional Plan | 10 % | 15 % | **15 %** | | Enterprise Plan | 10 % | 20 % | **20 %** | | Einrichtungsgebühr | 10 % | 0 % | **0 %** (keine Provision) | Jede Regel enthält: * **Externe Produktreferenz**: Kennung des Produkts (z.B. Produkt-ID oder externer Schlüssel) * **Prozentsatz**: Abweichender Provisionssatz für dieses Produkt * **Priorität**: Reihenfolge bei mehreren Regeln Produktregeln werden anhand der Rechnungsposition ermittelt. Gibt es keine Regel für ein Produkt, greift der Basisprozentsatz des Plans. *** ## Plan aktivieren und deaktivieren Pläne können jederzeit aktiviert oder deaktiviert werden. Deaktivierte Pläne generieren keine neuen Provisionen, bestehende Provisionen bleiben erhalten. *** ## Mehrere Pläne Du kannst beliebig viele Pläne erstellen. Ein Vertriebsmitarbeiter hat einen **Standard-Plan**, der bei Kundenzuweisungen automatisch verwendet wird. Bei individuellen Zuweisungen kann ein abweichender Plan gewählt werden. ``` Vertriebsmitarbeiter: Max Mustermann ├── Standard-Plan: "Neukundenvertrieb 10 %" │ ├── Kunde A → verwendet Standard-Plan (10 %) ├── Kunde B → verwendet Standard-Plan (10 %) └── Kunde C → individueller Plan: "Partner Premium 15 %" ``` # Vertriebsmitarbeiter Source: https://docs.fynn.eu/guide/commissions/sales-reps Vertriebsmitarbeiter anlegen, Kunden zuweisen und Provisionen pro Mitarbeiter nachverfolgen. ## Übersicht Vertriebsmitarbeiter sind die Empfänger von Provisionen. Jeder Mitarbeiter kann einem oder mehreren Kunden zugewiesen werden. Die Zuweisung bestimmt, für welche Rechnungen Provisionen berechnet werden. Vertriebsmitarbeiter *** ## Vertriebsmitarbeiter anlegen Navigiere zu **Provisionen > Aktionen > Einstellungen > Vertriebsmitarbeiter** und klicke auf **Neuer Mitarbeiter**. * **Vorname und Nachname** * **E-Mail-Adresse** * **Standard-Provisionsplan**: wird bei Kundenzuweisungen als Standard verwendet Der Mitarbeiter kann nun Kunden zugewiesen werden. Vertriebsmitarbeiter können direkt aus HubSpot oder Xentral importiert werden. Die Stammdaten (Name, E-Mail) werden automatisch übernommen. Navigiere zu **Provisionen > Aktionen > Einstellungen > Vertriebsmitarbeiter** und klicke auf **Mitarbeiter importieren**. In der Liste werden alle verfügbaren Mitarbeiter aus HubSpot und Xentral angezeigt. Wähle den gewünschten Mitarbeiter aus. Weise einen Standard-Provisionsplan zu und speichere den Mitarbeiter. Bei HubSpot-Importen wird der Mitarbeiter mit dem HubSpot-Benutzer verknüpft. Dadurch können Deals automatisch dem richtigen Vertriebsmitarbeiter zugeordnet werden. *** ## Kunden zuweisen Die Kundenzuweisung verbindet einen Kunden mit einem Vertriebsmitarbeiter. Ab diesem Zeitpunkt werden Provisionen für alle neuen Rechnungen dieses Kunden berechnet. Kundenzuweisung ### Einzeln zuweisen Navigiere zum Vertriebsmitarbeiter und öffne den Tab **Zuweisungen**. Klicke auf **Kunde zuweisen** und suche den gewünschten Kunden. Optional kannst du einen abweichenden Provisionsplan für diese spezifische Zuweisung wählen. ### Mehrere Kunden gleichzeitig zuweisen Für größere Vertriebsteams kannst du mehrere Kunden auf einmal verwalten: * **Mehrfach zuweisen**: Mehrere Kunden auf einen Mitarbeiter zuweisen * **Mehrfach übertragen**: Kunden von einem Mitarbeiter auf einen anderen übertragen * **Mehrfach entziehen**: Zuweisungen für mehrere Kunden aufheben Wird eine Zuweisung aufgehoben, werden keine neuen Provisionen mehr berechnet. Bestehende offene Provisionen bleiben erhalten und können weiterhin genehmigt und ausgezahlt werden. *** ## Mitarbeiter-Detailansicht Die Detailansicht zeigt eine Übersicht des Mitarbeiters mit Kennzahlen und Tabs: Mitarbeiter-Detail | Tab | Inhalt | | ---------------- | ----------------------------------------------------------- | | **Übersicht** | Offene, genehmigte und ausgezahlte Provisionen als Metriken | | **Zuweisungen** | Alle aktiven und inaktiven Kundenzuweisungen | | **Provisionen** | Alle Provisionen des Mitarbeiters mit Status und Beträgen | | **Auszahlungen** | Alle Auszahlungen des Mitarbeiters | *** ## Mitarbeiter archivieren Vertriebsmitarbeiter können archiviert werden, wenn sie nicht mehr aktiv sind. Archivierte Mitarbeiter: * Erscheinen nicht mehr in der aktiven Mitarbeiterliste * Generieren keine neuen Provisionen * Behalten alle historischen Provisionen und Auszahlungen Vor dem Archivieren: Stelle sicher, dass alle offenen Provisionen genehmigt oder storniert und alle Auszahlungen abgeschlossen sind. *** ## Kundenausschlüsse Bestimmte Kunden können global von der Provisionsberechnung ausgeschlossen werden, z.B. interne Testaccounts oder verbundene Unternehmen. Kundenausschlüsse Ausgeschlossene Kunden generieren keine Provisionen, unabhängig von der Zuweisung. Der Ausschluss wird mit Grund und Zeitstempel protokolliert. # Kundenbereich Source: https://docs.fynn.eu/guide/customers/customer-portal Kundenbereich Im Kundenbereich können Kunden eigenständig ihre Rechnungsadressen und Zahlungsmethoden verwalten, Abonnements einsehen, kündigen und Rechnungen herunterladen. ## Erreichbarkeit Der Kundenbereich ist standardmäßig über die URL `[tenant-username].customerfront.app` erreichbar. ### Eigene Domain Für den Kundenbereich und Warenkorb kann eine eigene Domain aufgeschaltet werden. Schreibe uns eine kurze E-Mail mit dem Wunsch an [hi@fynn.eu](mailto:hi@fynn.eu). ## Funktionsumfang ### Abonnements Unter dem Bereich "Abonnements" können Kunden ihre aktiven Abonnements einsehen, kündigen und Kündigungen widerrufen. Zudem sind Vertragsdetails wie Vertragsbeginn, Vertragsende und der nächste Rechnungsbetrag einsehbar. Kundenbereich - Abonnements ## Rechnungsadressen Unter dem Bereich "Rechnungsadresse" können Kunden eine Standard-Rechnungsadresse hinterlegen, die für alle zukünftigen Abonnements und Rechnungen verwendet wird. Alternativ kann eine neue Rechnungsadresse hinterlegt werden. Kundenbereich - Rechnungsadressen ## Lieferadressen Wenn die Lieferadresse für deine Organisation aktiviert ist, können Kunden im Bereich "Adressen" zusätzlich eine eigene Lieferadresse hinterlegen und bearbeiten. Ist noch keine eigene Lieferadresse gesetzt, wird die Standardadresse verwendet. Kunden können jederzeit eine neue Lieferadresse anlegen oder wieder auf die Standardadresse zurücksetzen. Die Bearbeitung der Lieferadresse im Kundenbereich ist optional. Schreibe uns eine kurze E-Mail an [hi@fynn.eu](mailto:hi@fynn.eu), wenn du die Funktion freischalten möchtest. ## Zahlungsmethoden Unter dem Bereich "Zahlungsmethoden" können Kunden eine Standard-Zahlungsmethode hinterlegen, die für alle zukünftigen Abonnements und Rechnungen verwendet wird. Alternativ kann eine neue Zahlungsmethode hinterlegt werden. Sobald ein Kunde eine Standard-Zahlungsmethode setzt oder ändert, übernimmt Fynn sie automatisch für den bestehenden Vertrag: Aktive Abonnements werden auf die neue Methode umgestellt und offene Rechnungen werden automatisch darüber eingezogen. Der Kunde muss offene Rechnungen also nicht mehr selbst überweisen. Rechnungen, für die bereits ein Einzug läuft, die Teil eines Zahlplans sind oder sich in der Mahnung befinden, bleiben unberührt. Kundenbereich - Zahlungsmethoden ## Rechnungen Unter dem Bereich "Rechnungen" können Kunden alle Rechnungen einsehen und herunterladen. Läuft für eine Rechnung gerade ein automatischer Einzug per SEPA, PayPal oder Karte, ist sie mit dem Hinweis "Zahlung in Verarbeitung" gekennzeichnet. Kundenbereich - Rechnungen ## Persönlicher Ansprechpartner Unter dem Bereich "Persönlicher Ansprechpartner" können Kunden ihren persönlichen Ansprechpartner einsehen. Dieser ist unter [Persönlicher Ansprechpartner hinterlegen](/guide/customers/introduction#persönlicher-ansprechpartner-hinterlegen) einstellbar. Kundenbereich - Persönlicher Ansprechpartner ## Link zum Kundenbereich erstellen Um Kunden authentifiziert in den Kundenbereich zu leiten, kann ein personalisierter Link erstellt werden. Klicke auf "Kunden" in der linken Navigation und wähle den Kunden aus, für den du einen authentifizierten Link erstellen möchtest. Klicke oben rechts auf die drei Punkte und wähle "Kundenbereich-Link erstellen" aus. Der Link wurde erfolgreich erstellt und wurde in die Zwischenablage kopiert. Du kannst den Link nun an den Kunden weiterleiten. Um einen Link zum Kundenbereich zu erstellen, kann die API verwendet werden. ```bash theme={null} POST /customers/{customerId}/authenticate ``` Als Antwort wird eine URL zurückgegeben, die den Kunden authentifiziert in den Kundenbereich leitet. Den Access- & Refresh-Token kannst du andernfalls für die API Authentifierung verwenden, um eigene Anfragen an die API zu stellen. ```json theme={null} { "data": { "customerAreaLink": "https://[tenant-username].customerfront.app/customer-area/login?token=abc", "accessToken": "eyxxxxxx", "refreshToken": "eyxxxxxx" } } ``` [Zur API-Dokumentation](/api-reference/customer/authenticate-customer) ## Login-E-Mail an Kunden senden Du kannst Kunden eine E-Mail mit einem Login-Link senden, über den sie direkt in ihren Kundenbereich gelangen – ohne Passwort oder Code eingeben zu müssen. Klicke auf "Kunden" in der linken Navigation und wähle den Kunden aus. Klicke oben rechts auf die drei Punkte und wähle "Login-E-Mail senden" aus. Der Kunde erhält eine E-Mail mit einem Link, über den er sich direkt einloggen kann. ```bash theme={null} POST /customers/{customerId}/send-login-email ``` Der Kunde erhält eine E-Mail mit einem Login-Link zum Kundenbereich. [Zur API-Dokumentation](/api-reference/customer/send-login-email) Diese Funktion ist besonders nützlich für Support-Anfragen oder um Kunden beim Zugang zu ihrem Kundenbereich zu helfen. ## Kundenbereich anpassen Im Kundenbereich können einzelne Bereiche oder Funktionen angepasst werden. Hierzu gehören: * Ansprechpartner anzeigen * Rechnungen anzeigen * Rechnungsadresse verwalten * Zahlungsmethoden verwalten * Abonnements einsehen * Abonnements kündigen * Verhalten bei Kündigung während Testphase Die Einstellungen findest du unter "Einstellungen" > "Hosted Pages". Kundenbereich - Anpassungen ### Verhalten bei Kündigung während Testphase Wenn ein Kunde ein Abonnement während der Testphase kündigt, kann das Verhalten des Kündigungszeitpunktes festgelegt werden. Folgende Optionen stehen zur Verfügung: * **Abonnement zum Zeitpunkt der Kündigung beenden**: Das Abonnement wird sofort gekündigt, auch wenn die Testphase noch nicht abgelaufen ist. * **Abonnement zum Ende der Testphase beenden**: Das Abonnement wird zum Ende der Testphase beendet, die Küdigung wird vorgemerkt. Die Einstellungen gelten für alle Kunden, die über den Kundenbereich kündigen. Diese Einstellung ist für die Wallet nicht relevant, da bei Kündigung durch einen Mitarbeiter der Kündigungszeitpunkt manuell festgelegt wird. ## Zahlungsmethode hinzufügen per Link Um Kunden die Möglichkeit zu geben, eine Zahlungsmethode per Link hinzuzufügen, kann ein personalisierter Link erstellt und optional per E-Mail versendet werden. Der Kunde kann anschließend auswählen, ob die Zahlungsmethode für bestehende und zukünftige Abonnements verwendet werden soll. Zudem wird die Zahlungsmethode für offene Rechnungen verwendet, sofern die letzte Zahlung nicht erfolgreich war. Die Zahlungsmethode wird automatisch als Standard-Zahlungsmethode hinterlegt. Klicke auf "Kunden" in der linken Navigation und wähle den Kunden aus, für den du einen Link erstellen möchtest. Klicke oben rechts auf die drei Punkte und wähle "Zahlungsmethode hinzufügen" aus. Wähle die Zahlungsmethoden aus, die der Kunde hinzufügen kann und ob eine E-Mail versendet werden soll. Klicke auf "Link erstellen". Zahlungsmethode hinzufügen Der Link wurde erfolgreich erstellt und wurde in die Zwischenablage kopiert. Du kannst den Link nun an den Kunden weiterleiten. Um einen Link zum Hinzufügen einer Zahlungsmethode zu erstellen, kann die API verwendet werden. ```bash theme={null} POST /payment-methods/link ``` [Weitere Informationen zur API](/api-reference/paymentmethod/create-payment-method-link) # E-Mail-Adressen verwalten Source: https://docs.fynn.eu/guide/customers/email-management Verwalte E-Mail-Adressen und lege fest, welche E-Mails für Rechnungen und Mahnungen verwendet werden. ## Übersicht Jeder Kunde kann mehrere E-Mail-Adressen haben. Über die E-Mail-Zuordnung legst du fest, welche Adressen für welchen Zweck verwendet werden: | Rolle | Auswahl | Verwendung | | -------------------- | --------------- | ------------------------------------------------------------------- | | **Primär-E-Mail** | Einzelauswahl | Standard-Kontakt-E-Mail (Zahlungsmethoden-Benachrichtigungen, etc.) | | **Rechnungs-E-Mail** | Mehrfachauswahl | Empfänger für Rechnungen, Gutschriften und Finanzdokumente | | **Mahnwesen-E-Mail** | Mehrfachauswahl | Empfänger für Zahlungserinnerungen und Mahnungen | E-Mail-Adressverwaltung ## E-Mail-Adressen zuordnen Navigiere zum gewünschten Kunden und öffne den Reiter **Stammdaten**. Im Bereich **E-Mail-Adressen** findest du drei Dropdowns zur Zuordnung der Rollen. Wähle im Dropdown **Primär-E-Mail** die Standard-Kontakt-E-Mail des Kunden aus. Es kann immer nur eine Primär-E-Mail festgelegt werden. Wähle im Dropdown **Rechnungs-E-Mail** eine oder mehrere E-Mail-Adressen aus, die Rechnungen erhalten sollen. Ausgewählte E-Mails werden als Chips im Dropdown angezeigt und können per Klick auf das ✕ entfernt werden. Wenn keine Rechnungs-E-Mail gesetzt ist, wird automatisch die Primär-E-Mail verwendet. Wähle im Dropdown **Mahnwesen-E-Mail** eine oder mehrere E-Mail-Adressen aus, die Zahlungserinnerungen und Mahnungen erhalten sollen. Wenn keine Mahnwesen-E-Mail gesetzt ist, werden Mahnungen an die Rechnungs-E-Mail gesendet. Ist auch keine Rechnungs-E-Mail gesetzt, wird die Primär-E-Mail verwendet. ## E-Mail-Adresse hinzufügen Neue E-Mail-Adressen können direkt aus jedem Dropdown hinzugefügt werden: Öffne eines der drei E-Mail-Dropdowns (Primär, Rechnung oder Mahnwesen). Klicke am Ende der Dropdown-Liste auf **+ Neue E-Mail-Adresse hinzufügen**. Gib die E-Mail-Adresse und optional den Empfängernamen ein und bestätige mit **Hinzufügen**. Die neue E-Mail-Adresse steht sofort in allen Dropdowns zur Auswahl zur Verfügung. ## Mahnwesen-E-Mail: Fallback-Kette Wenn eine Mahnung ausgelöst wird, bestimmt das System den Empfänger anhand folgender Reihenfolge: ``` 1. Mahnwesen-E-Mail(s) gesetzt? ├── Ja → Mahnung an alle Mahnwesen-E-Mails senden └── Nein ↓ 2. Rechnungs-E-Mail(s) gesetzt? ├── Ja → Mahnung an alle Rechnungs-E-Mails senden └── Nein ↓ 3. Primär-E-Mail → Mahnung an Primär-E-Mail senden ``` Durch die Fallback-Kette ist sichergestellt, dass Mahnungen immer zugestellt werden, auch wenn keine explizite Mahnwesen-E-Mail konfiguriert ist. Bestehende Kunden ohne Mahnwesen-E-Mail verhalten sich wie bisher. ## Welche Benachrichtigungen nutzen welche E-Mail? | Benachrichtigungstyp | E-Mail-Rolle | | ---------------------------------------- | ----------------------------------- | | Rechnung erstellt / bezahlt / storniert | Rechnungs-E-Mail | | Gutschrift / Erstattung | Rechnungs-E-Mail | | Zahlungserinnerung / Mahnung | **Mahnwesen-E-Mail** (mit Fallback) | | SEPA-Vorabinformation | Rechnungs-E-Mail | | Preisänderung / Abo-Kündigung | Rechnungs-E-Mail | | Zahlungsmethode hinzugefügt / abgelaufen | Primär-E-Mail | ## API ```bash theme={null} POST /customers/{customerId}/email-addresses { "email": "buchhaltung@example.com", "receiverName": "Buchhaltung", "isInvoiceEmail": true, "isDunningEmail": false, "isDefault": false } ``` ```bash theme={null} PATCH /customer-email-addresses/{id} Content-Type: application/merge-patch+json { "isDunningEmail": true } ``` ```bash theme={null} GET /customers/{customerId}/email-addresses?isDunningEmail=true GET /customers/{customerId}/email-addresses?isInvoiceEmail=true ``` Weitere API-Endpunkte findest du in der [API-Referenz](/api-reference/customeremail/get-customer-email-addresses). # E-Mail-Versand und Statusverfolgung Source: https://docs.fynn.eu/guide/customers/email-tracking Verfolge den Versandstatus von E-Mails und verwalte die Kommunikation mit deinen Kunden. ## Übersicht Fynn bietet eine umfassende E-Mail-Versandverfolgung, mit der du den Status jeder gesendeten E-Mail einsehen kannst. Du kannst sehen, ob E-Mails erfolgreich zugestellt wurden, geöffnet wurden oder ob es Probleme beim Versand gab. E-Mail-Übersicht im Kunden-Tab ## Globale E-Mail-Übersicht Neben der kundenbezogenen Ansicht bietet Fynn eine mandantenweite E-Mail-Übersicht, in der alle gesendeten E-Mails zentral einsehbar sind — unabhängig vom Kunden. ### Globale Liste öffnen Navigiere zu **Benachrichtigungen > Gesendete E-Mails** in der linken Navigation. Die globale E-Mail-Liste unterstützt folgende Filter: * **Zeitraum**: Eingrenzen nach Versanddatum * **Status**: Filtern nach Zustellstatus (Zugestellt, Ausstehend, Zurückgewiesen, Fehlgeschlagen, etc.) * **Betreff**: Volltextsuche im E-Mail-Betreff * **Empfänger**: Suche nach Empfänger-E-Mail-Adresse * **Kunde**: Einschränkung auf einen bestimmten Kunden ### Organisationsübergreifende Ansicht Wenn ein Kunde Teil einer [Organisationsstruktur](/guide/customers/organization-hierarchy) ist, kann die E-Mail-Liste auch alle E-Mails der zugehörigen Child-Kunden anzeigen. Aktiviere dafür die Option **Parent-Kunde einbeziehen** bei der Kundenfilterung. ## E-Mail-Tab im Kundenbereich Im Kundenbereich findest du einen eigenen Tab "E-Mails", der alle an den Kunden gesendeten E-Mails chronologisch auflistet. ### E-Mail-Liste anzeigen Navigiere zu einem Kunden in der [Kundenübersicht](https://app.fynn.eu/customers) und wähle den gewünschten Kunden aus. Klicke auf den Tab **"E-Mails"** in der Kundenansicht. E-Mail-Tab im Kundenbereich Die E-Mail-Liste zeigt alle gesendeten E-Mails mit folgenden Informationen: * **Datum**: Wann die E-Mail gesendet wurde * **Betreff**: Der E-Mail-Betreff * **Typ**: Art der E-Mail (Rechnung, Mahnung, Benachrichtigung, etc.) * **Status**: Aktueller Versandstatus * **Geöffnet**: Anzahl der Öffnungen Bei E-Mails mit mehreren Empfängern siehst du "An X Empfänger" unter dem Betreff. ## E-Mail-Status verstehen Jede E-Mail hat einen Status, der den aktuellen Versandzustand anzeigt. Die Status-Badges sind farbcodiert, damit du auf einen Blick erkennen kannst, ob alles in Ordnung ist. ### Status-Badges Die E-Mail wurde in die Warteschlange gestellt, ist aber noch nicht versendet worden. Die E-Mail wurde erfolgreich an den E-Mail-Server des Empfängers zugestellt. Der Empfänger hat die E-Mail geöffnet. Bei mehrfachen Öffnungen wird die Anzahl angezeigt. Die E-Mail konnte nicht zugestellt werden (z.B. ungültige E-Mail-Adresse oder volles Postfach). Der Versand der E-Mail ist fehlgeschlagen (z.B. Serverfehler). Die E-Mail wurde über einen benutzerdefinierten SMTP-Server versendet. Detaillierte Statusverfolgung ist nicht verfügbar. Der Status "Custom SMTP" erscheint, wenn E-Mails über einen benutzerdefinierten SMTP-Server versendet werden. In diesem Fall ist keine detaillierte Statusverfolgung (Öffnungen, Bounces, etc.) möglich, da der SMTP-Server keine Webhooks sendet. ## E-Mail-Details anzeigen Für jede E-Mail kannst du detaillierte Informationen anzeigen, einschließlich des vollständigen E-Mail-Inhalts und des Zustellungsverlaufs. Klicke auf eine E-Mail in der Liste, um die Detailansicht zu öffnen. E-Mail-Detailansicht In der Detailansicht findest du: * **Betreff**: Vollständiger E-Mail-Betreff * **Status**: Aktueller Versandstatus mit Badge * **Versandart**: Ob die E-Mail über Fynn oder einen eigenen SMTP-Server versendet wurde * **Von/An**: Absender und alle Empfänger * **Gesendet am**: Zeitpunkt des Versands * **Zugestellt am**: Zeitpunkt der Zustellung (falls verfügbar) * **Geöffnet am**: Zeitpunkt der ersten Öffnung (falls verfügbar) Der vollständige E-Mail-Inhalt wird in einer sicheren Vorschau angezeigt. Du kannst so sehen, wie die E-Mail beim Empfänger angekommen ist. Die E-Mail-Vorschau wird in einer sandboxed Umgebung angezeigt, um Sicherheit zu gewährleisten. ## Status bei mehreren Empfängern Wenn eine E-Mail an mehrere Empfänger gesendet wird, wird für jeden Empfänger ein separater Status verfolgt. ### Per-Empfänger-Status Öffne die Detailansicht einer E-Mail, die an mehrere Empfänger gesendet wurde. In der Detailansicht findest du einen Abschnitt **"Status pro Empfänger"**, der für jeden Empfänger den individuellen Status anzeigt. Status pro Empfänger Der Gesamtstatus der E-Mail zeigt immer den "schlimmsten" Status an. Wenn z.B. eine E-Mail an drei Empfänger gesendet wurde und einer zurückgewiesen wurde, zeigt der Gesamtstatus "Zurückgewiesen" an, auch wenn die anderen beiden erfolgreich zugestellt wurden. Im Zustellungsverlauf siehst du, welche Ereignisse zu welchem Empfänger gehören. Jedes Ereignis ist mit dem entsprechenden Empfänger gekennzeichnet. ## Zustellungsverlauf Der Zustellungsverlauf zeigt alle wichtigen Ereignisse im Lebenszyklus einer E-Mail chronologisch an. ### Verfügbare Ereignisse * **Gesendet**: E-Mail wurde an den E-Mail-Server übergeben * **Zugestellt**: E-Mail wurde erfolgreich zugestellt * **Geöffnet**: Empfänger hat die E-Mail geöffnet * **Geklickt**: Empfänger hat auf einen Link in der E-Mail geklickt * **Zurückgewiesen**: E-Mail konnte nicht zugestellt werden * **Fehlgeschlagen**: Versand ist fehlgeschlagen Zustellungsverlauf ## E-Mail-Versand über Fynn Fynn bietet zwei Möglichkeiten, E-Mails zu versenden, die unterschiedliche Möglichkeiten zur Statusverfolgung bieten. ### E-Mail-Versand über Fynn (Empfohlen) Wenn E-Mails über Fynn versendet werden, steht eine umfassende Statusverfolgung zur Verfügung: * ✅ Detaillierte Statusverfolgung (Zugestellt, Geöffnet, Geklickt, Zurückgewiesen) * ✅ Echtzeit-Updates über Webhooks * ✅ Per-Empfänger-Status bei mehreren Empfängern * ✅ Vollständiger Zustellungsverlauf E-Mails werden standardmäßig über Fynn versendet, wenn keine benutzerdefinierte SMTP-Konfiguration vorhanden ist. ### E-Mail-Versand über eigenen SMTP-Server Wenn du einen eigenen SMTP-Server konfiguriert hast, werden E-Mails über diesen Server versendet: * ⚠️ Basis-Statusverfolgung (nur Versand-Erfolg/Fehler) * ⚠️ Keine detaillierte Statusverfolgung (keine Öffnungen, Bounces, etc.) * ⚠️ Status wird als "Custom SMTP" angezeigt Bei E-Mails, die über einen eigenen SMTP-Server versendet werden, ist keine detaillierte Statusverfolgung möglich, da SMTP-Server keine Webhooks senden. Du siehst nur, ob die E-Mail erfolgreich an den SMTP-Server übergeben wurde. ## Häufige Fragen Wenn eine E-Mail gerade erst versendet wurde, kann es einige Sekunden dauern, bis der Status aktualisiert wird. Bei E-Mails, die über Custom SMTP versendet wurden, ist nur ein Basis-Status verfügbar. Dieser Status erscheint, wenn E-Mails über einen benutzerdefinierten SMTP-Server versendet werden. In diesem Fall kann Fynn keine detaillierten Informationen über Öffnungen, Bounces oder Klicks bereitstellen, da der SMTP-Server keine Webhooks sendet. Wenn eine E-Mail an mehrere Empfänger gesendet wurde und mindestens einer zurückgewiesen wurde, zeigt der Gesamtstatus "Zurückgewiesen" an. In der Detailansicht kannst du den Status pro Empfänger einsehen. Bei E-Mails, die über Fynn versendet wurden, werden Status-Updates automatisch in Echtzeit aktualisiert. Du musst die Seite nicht aktualisieren, um die neuesten Status-Informationen zu sehen. Ja, bei E-Mails mit mehreren Empfängern kannst du in der Detailansicht sehen, welcher Empfänger die E-Mail geöffnet hat. Die Öffnungsereignisse sind im Zustellungsverlauf mit dem entsprechenden Empfänger gekennzeichnet. # Kunde verwalten Source: https://docs.fynn.eu/guide/customers/introduction Erstelle und verwalte Kunden. ## Kunde erstellen Erstelle einen neuen Kunden um Abonnements und Rechnungen zu erstellen. Um die Kunden erstellen Maske zu öffnen, gibt es mehrere Möglichkeiten. Die schnellste Möglichkeit ist es, oben links auf das Plus-Symbol zu klicken und dann "Kunde" auszuwählen. Alternativ kannst du einfach `c` `n` als Tastenkombination verwenden. Plus-Shortcut Andernfalls kannst du auch auf ["Kunden"](https://app.fynn.eu/customers) in der linken Navigation klicken und dann auf "Neu". Fülle die Kundendetails aus. Je nach Kundentyp (Privatperson oder Unternehmen) sind unterschiedliche Felder erforderlich. Standardmäßig wird eine Kundennummer auf Basis des [Nummernkreises](/guide/tenant/number-ranges) generiert. Du kannst die Kundennummer auch manuell festlegen, indem du auf "Kundennummer" klickst und eine eigene Nummer eingibst. **Automatische Spracherkennung:** Die Sprache des Kunden wird automatisch anhand des Landes vorgeschlagen. Kunden aus DACH-Ländern (DE, AT, CH) erhalten Deutsch, alle anderen Englisch. Die Sprache bestimmt, in welcher Sprache [Benachrichtigungen](/guide/notifications/introduction) und [Rechnungen](/guide/invoices/introduction) erstellt werden. Du kannst die vorgeschlagene Sprache jederzeit manuell überschreiben. Wird die Empfängeradresse nicht ausgefüllt, wird automatisch eine leere Adresse erstellt. Diese kannst du im Nachhinein bearbeiten. Die Empfängeradresse wird zur Erstellung von [Rechnungen](/guide/invoices) und [Angeboten](/guide/offers) verwendet. Empfängeradresse In einigen Fällen kann es erforderlich sein, dass die Rechnungs E-Mail Adresse von der Empfängeradresse abweicht. In diesem Fall kannst du die abweichenden Rechnungsdaten ausfüllen. Die DATEV-Integration ist als Add-On verfügbar. Kontaktiere uns, wenn du die DATEV-Integration aktivieren möchtest. Wenn du die DATEV-Integration aktiviert hast, kannst du hier die DATEV-Debitorennummer eingeben oder automatisch auf Basis des [Nummernkreises](/guide/tenant/number-ranges) generieren lassen. DATEV Einstellungen Kunde anlegen Klicke nun auf Kunde erstellen um den Kunden anzulegen. Der Kunde wurde erfolgreich angelegt. Du kannst nun [Abonnements](/guide/subscriptions), [Angebote](/guide/offers) und [Rechnungen](/guide/invoices) für den Kunden erstellen. Kunde erfolgreich angelegt Verwende hierfür den [Kunde erstellen](/api-reference/customer/create-customer) Endpunkt. ```bash theme={null} POST /customers ``` Alternativ kannst du den [Kunden abrufen](/api-reference/customer/get-customer) oder den [Kunden über die API aktualisieren](/api-reference/customer/update-customer). Der Import der Kundendaten ist aktuell über folgende Wege möglich: * Anlage über die [API](/api-reference/customer/create-customer) * DATEV-Debitorenstamm-Import * Stripe-Import Solltest du Interesse an einem Stripe oder DATEV-Debitorenstamm-Import haben, oder von einer anderen Subscription Billing Lösung migrieren wollen, kontaktiere uns bitte hierzu. ## Kunde bearbeiten Nachdem du einen Kunden erstellt hast, kannst du die Kundendetails jederzeit bearbeiten. Unter Umständen kann es sein, dass du die Kundendetails nicht bearbeiten kannst, sofern du nicht die entsprechenden Berechtigungen hast oder die Kunden in der Web-Oberfläche schreibgeschützt sind. Um die Einstellungen zu schreibgeschützte Kunden zu ändern, siehe [Schreibgeschützte Kunden](/guide/tenant/ui-defaults#Schreibgeschützte-Kunden). Um die Kundendetails zu bearbeiten, klicke auf "Kunden" in der linken Navigation und wähle den Kunden aus, den du bearbeiten möchtest. Klicke nun auf "Bearbeiten" auf der rechten Seite um die Kundendetails zu bearbeiten. Passe die Kundendetails an und klicke auf "Speichern" um die Änderungen zu übernehmen. Kunde bearbeiten Um die Adresse des Kunden zu bearbeiten, bleibe in der selben Maske und wähle das passende Dropdown im Bereich "Adressen" aus. Neben der Adresse kannst du über das "Stift"-Symbol die Adresse bearbeiten. Bei einer Änderung der Adresse wird die Adresse ebenfalls für bestehende Abonnements aktualisiert, sofern diese am Abonnement ausgewählt wurde, oder die Standardadresse verwendet werden soll. Wünscht du dies nicht, lege bitte eine neue Adresse an und wähle diese explizit am Abonnement aus. Adresse bearbeiten ## Kunde archivieren Du kannst einen Kunden archivieren, um diesen in der Kundenübersicht auszublenden. Archivierte Kunden können zu einem späteren Zeitpunkt wiederhergestellt werden. Um einen Kunden zu archivieren, klicke auf "Kunden" in der linken Navigation und wähle den Kunden aus, den du archivieren möchtest. Klicke nun auf "Archivieren" auf der rechten Seite um den Kunden zu archivieren. Bestätige das Archivieren des Kunden, indem du auf "Archivieren" klickst. Einmal archivierte Kunden können wiederhergestellt werden. Der Kunde wurde erfolgreich archiviert und wird in der Kundenübersicht ausgeblendet. Verwende hierfür den [Kunde archivieren](/api-reference/customer/archive-customer) Endpunkt. ```bash theme={null} PUT /customers/{customerId}/archive ``` ## Kunde löschen Du kannst einen Kunden löschen, wenn dieser nicht mehr benötigt wird. Um einen Kunden löschen zu können, müssen folgende Bedingungen erfüllt sein: * Der Kunde darf keine aktiven Abonnements besitzen * Der Kunde darf keine Rechnungen besitzen * Der Kunde darf keine abgeschlossenen Bestellungen besitzen * Der Kunde darf keine Zahlungen besitzen Sollte eines der oben genannten Kriterien nicht erfüllt sein, kannst du stattdessen den \[Kunden archivieren]\(#Kunde archivieren). Archivierte Kunden werden in der Kundenübersicht ausgeblendet. Um einen Kunden zu löschen, klicke auf "Kunden" in der linken Navigation und wähle den Kunden aus, den du löschen möchtest. Klicke nun auf "Löschen" auf der rechten Seite um den Kunden zu löschen. Bestätige die Löschung des Kunden, indem du auf "Unwiderruflich löschen" klickst. Einmal gelöschte Kunden können **nicht** wiederhergestellt werden. Der Kunde wurde erfolgreich gelöscht. Verwende hierfür den [Kunde löschen](/api-reference/customer/delete-customer) Endpunkt. ```bash theme={null} DELETE /customers/{customerId} ``` ## Kunden exportieren Um Kunden als Xlsx-Datei zu exportieren, navigiere zur Kundenübersicht und klicke auf "Exportieren". Der Export umfasst alle Kunden, die in deiner Organisation angelegt sind. Im Export sind folgende Informationen enthalten: * Kundenstammdaten * Standard-Rechnungsadresse * Standard-Kundenadresse * Kunden-E-Mail-Adresse * Rechnungs-E-Mail-Adresse * Standard-Zahlungsart Kunden exportieren ## Persönlicher Ansprechpartner hinterlegen Du kannst für jeden Kunden einen persönlichen Ansprechpartner hinterlegen. Dieser wird auf Angeboten, im [Kundenbereich](/guide/customers/customer-portal) und in der Kundendetailansicht angezeigt. ## Einstellungen Individuelle Einstellungen pro Kunde wie Zahlungsfrist, automatischer Versand und Mahnwesen findest du unter [Kundeneinstellungen](/guide/customers/settings). # Organisationsstruktur Source: https://docs.fynn.eu/guide/customers/organization-hierarchy Bilde Unternehmenshierarchien mit Parent-Child-Beziehungen zwischen Kunden ab. Viele Organisationen bestehen aus einer übergeordneten Einheit mit mehreren Abteilungen, Standorten oder Tochtergesellschaften. Die Organisationsstruktur ermöglicht es, diese Beziehungen direkt in Fynn abzubilden — mit einer klaren Parent-Child-Hierarchie zwischen Kunden. Die Organisationsstruktur erfordert die Aktivierung des Feature-Flags `customer.hierarchy`. Kontaktiere den Support, um diese Funktion für deinen Mandanten freizuschalten. ## Überblick Mit der Organisationsstruktur kannst du: * **Parent-Child-Beziehungen** zwischen Kunden definieren (z. B. Hauptunternehmen → Abteilungen) * **Bis zu 3 Hierarchieebenen** abbilden (Hauptunternehmen → Tochtergesellschaft → Abteilung) * **Abonnements, Rechnungen und Transaktionen** gefiltert nach Organisationszugehörigkeit einsehen * **Aktivitäten** zur Nachverfolgung von Hierarchieänderungen nutzen Die Organisationsstruktur ist eine rein organisatorische Funktion. Sie hat in der aktuellen Version keinen Einfluss auf die Rechnungsstellung oder Zahlungsabwicklung. Sie bildet die Grundlage für zukünftige Funktionen wie die organisationsbasierte Abrechnung (Consolidated Billing). ## Anwendungsbeispiele | Branche | Parent-Kunde | Child-Kunden | | ---------------- | ------------------------- | --------------------------------------- | | Gesundheitswesen | Klinik Musterstadt | Radiologie, Orthopädie, Kardiologie | | Recht | Kanzlei Schmidt & Partner | Standort Berlin, Standort München | | Einzelhandel | Retail Group GmbH | Filiale Nord, Filiale Süd, Filiale West | ## Hierarchie verwalten ### Parent-Kunde zuweisen Navigiere zum Kunden, der als Child-Kunde einem übergeordneten Kunden zugewiesen werden soll. Im Bereich Organisationsstruktur kannst du den übergeordneten Kunden (Parent) auswählen und zuweisen. Verwende den [Set parent customer](/api-reference/customer/set-parent-customer) Endpunkt. ```bash theme={null} PUT /customers/{customerId}/set-parent ``` ```json theme={null} { "parentCustomerId": "00000000-0000-0000-0000-000000000000" } ``` ### Parent-Kunde entfernen Navigiere zum Child-Kunden, dessen Parent-Zuweisung entfernt werden soll. Im Bereich Organisationsstruktur kannst du die bestehende Parent-Zuweisung entfernen. Der Kunde wird dadurch wieder zu einem eigenständigen Kunden ohne Hierarchie. Verwende den [Remove parent customer](/api-reference/customer/remove-parent-customer) Endpunkt. ```bash theme={null} PUT /customers/{customerId}/remove-parent ``` ### Child-Kunden einsehen Auf der Kundendetailseite eines Parent-Kunden wird die Anzahl der Child-Kunden angezeigt. Über den Bereich Organisationsstruktur kannst du direkt zu den Child-Kunden navigieren. Verwende den [Get customer children](/api-reference/customer/get-customer-children) Endpunkt, um alle direkten Child-Kunden inklusive Metriken abzurufen. ```bash theme={null} GET /customers/{customerId}/children ``` Die Antwort enthält für jeden Child-Kunden die Kundendaten sowie die Anzahl aktiver Abonnements (`activeSubscriptionCount`). ### Gesamte Hierarchie anzeigen Über die API kannst du die vollständige Hierarchie eines Kunden als Baumstruktur abrufen — unabhängig davon, ob du den Parent- oder einen Child-Kunden angibst. Die Antwort beginnt immer beim Root-Kunden. ```bash theme={null} GET /customers/{customerId}/hierarchy ``` ```json theme={null} { "root": { "id": "uuid-100", "name": "Klinik Musterstadt", "customerNumber": "CUST-100", "isCurrentCustomer": false, "children": [ { "id": "uuid-101", "name": "Radiologie", "customerNumber": "CUST-101", "isCurrentCustomer": true, "children": [] }, { "id": "uuid-102", "name": "Orthopädie", "customerNumber": "CUST-102", "isCurrentCustomer": false, "children": [] } ] } } ``` ## Kundenliste filtern Die Kundenliste unterstützt zusätzliche Filter für die Organisationsstruktur: | Filter | Beschreibung | | ------------------ | ------------------------------------------------------------------ | | `parentCustomerId` | Zeigt nur die direkten Child-Kunden eines bestimmten Parent-Kunden | | `isParent=true` | Zeigt nur Kunden, die Child-Kunden haben | | `hasParent=true` | Zeigt nur Kunden, die einem Parent-Kunden zugewiesen sind | Beispiel über die API: ```bash theme={null} GET /customers?parentCustomerId={parentId} GET /customers?isParent=true GET /customers?hasParent=true ``` ## Organisationsübergreifende Ansichten Wenn ein Parent-Kunde ausgewählt ist, können Abonnements, Rechnungen und Transaktionen aller zugehörigen Child-Kunden über den `parentCustomer`-Filter zusammen eingesehen werden. ```bash theme={null} GET /subscriptions?parentCustomer={parentCustomerId} GET /invoices?parentCustomer={parentCustomerId} GET /transactions?parentCustomer={parentCustomerId} ``` ## Validierungsregeln Bei der Verwaltung der Organisationsstruktur gelten folgende Regeln: | Regel | Beschreibung | | ------------------ | ------------------------------------------------------------------------------------ | | Maximale Tiefe | Die Hierarchie unterstützt maximal 3 Ebenen (Root → Child → Grandchild) | | Keine Zirkelbezüge | Ein Kunde kann nicht sein eigener Parent sein, weder direkt noch indirekt | | Gleicher Mandant | Parent- und Child-Kunde müssen zum selben Mandanten gehören | | Aktiver Parent | Der Parent-Kunde darf nicht archiviert sein | | Archivierung | Ein Kunde mit aktiven (nicht archivierten) Child-Kunden kann nicht archiviert werden | ## Webhooks Änderungen an der Organisationsstruktur lösen Webhook-Events aus: | Event | Beschreibung | | -------------------------- | --------------------------------- | | `customer.parent.assigned` | Ein Parent-Kunde wurde zugewiesen | | `customer.parent.removed` | Ein Parent-Kunde wurde entfernt | Weitere Informationen zur Konfiguration von Webhooks findest du unter [Webhooks](/guide/webhooks/introduction). ## Ausblick Die Organisationsstruktur ist die Grundlage für zukünftige Abrechnungsfunktionen auf Organisationsebene. Geplant sind unter anderem: * **Organisationsbasierte Abrechnung (Consolidated Billing):** Rechnungen für Child-Kunden können an den Parent-Kunden gerichtet werden. * **Flexible Zahlungssteuerung:** Pro Child-Kunde kann festgelegt werden, wer Rechnungsempfänger und Zahlungspflichtiger ist. * **Konsolidierungszeiträume:** Rechnungen können monatlich oder quartalsweise zusammengefasst werden. # Kundeneinstellungen Source: https://docs.fynn.eu/guide/customers/settings Individuelle Einstellungen pro Kunde konfigurieren ## Übersicht Die Kundeneinstellungen ermöglichen es dir, spezifische Einstellungen für jeden Kunden zu konfigurieren. Standardmäßig werden diese Einstellungen aus der Organisation übernommen. Woher die Einstellungen übernommen werden, kannst du durch den Vererbungshinweis erkennen: * **Vererbt von Organisation**: Die Einstellung wird aus den Organisationseinstellungen übernommen * **Vererbt aus Standardwerten**: Die Einstellung verwendet den Systemstandard * **Kundenspezifischer Wert**: Die Einstellung wurde individuell für diesen Kunden gesetzt Ist eine Einstellung einmal kundenindividuell gesetzt, kann diese nicht mehr automatisch von der Organisation übernommen werden. ## Einstellungen öffnen Navigiere zu "Kunden" und wähle den gewünschten Kunden aus. Klicke auf den Tab "Einstellungen" in der Kundendetailansicht. ## Elektronische Rechnung Konfiguriere, ob und in welchem Format der Kunde elektronische Rechnungen erhalten soll. Alle Einstellungen und Details zur elektronischen Rechnung findest du unter [e-Rechnung](/guide/invoices/e-invoicing). ## Zahlungsfrist anpassen Die Zahlungsfrist wird standardmäßig auf 14 Tage gesetzt und aus der Organisation übernommen. Du kannst die Zahlungsfrist für den Kunden individuell anpassen. Zahlungsfrist Die Zahlungsfrist wird auf alle neuen Rechnungen für diesen Kunden angewendet. Bestehende Rechnungen werden nicht geändert. ## Belege automatisch versenden Deaktiviere diese Option, um Rechnungen aus einem Abonnement nicht automatisch freizugeben. Hierdurch kannst du die Rechnung vor dem Versand noch einmal prüfen und ggf. anpassen. Belege automatisch versenden Wenn diese Option deaktiviert ist, musst du Rechnungen manuell finalisieren und versenden. ## Zahlungserinnerungen deaktivieren Deaktiviere diese Option, um keine Zahlungserinnerungen für den Kunden zu versenden. Hiermit wird die Zahlungserinnerung als auch Mahnungen für den Kunden deaktiviert. Zahlungserinnerungen deaktivieren Diese Einstellung betrifft nur automatische Zahlungserinnerungen. Manuelle Erinnerungen können weiterhin versendet werden. ## Kundenguthaben (Wallet) Steuere das Verhalten des Kundenguthabens für diesen Kunden individuell. Standardmäßig werden die Werte aus den globalen Abrechnungseinstellungen übernommen. ### Überzahlungen als Guthaben verbuchen Aktiviere diese Option, damit Überzahlungen automatisch dem Kundenguthaben gutgeschrieben werden. Ist sie deaktiviert, bleiben Überzahlungen als Differenz bestehen und müssen manuell bearbeitet werden. ### Guthaben automatisch auf offene Rechnungen anrechnen Wenn aktiviert, wird vorhandenes Guthaben dieses Kunden automatisch auf seine offenen Rechnungen angerechnet, beginnend mit der ältesten fälligen Rechnung. Mehr Details zur Funktionsweise findest du unter [Kundenguthaben](/guide/invoices/wallet-balance). Die globalen Standardwerte werden unter [Einstellungen > Abrechnung](/guide/tenant/billing) konfiguriert. ## Mahngebühren deaktivieren Deaktiviere diese Option, um keine Mahngebühren für den Kunden zu berechnen. Mahngebühren deaktivieren ## API Du kannst die Kundeneinstellungen auch über die API abrufen und ändern: ```bash theme={null} GET /customers/{customerId}/settings ``` [API Dokumentation](/api-reference/customersettings/get-settings) ```bash theme={null} PUT /customers/{customerId}/settings ``` [API Dokumentation](/api-reference/customersettings/update-settings) # Entwickler Source: https://docs.fynn.eu/guide/developers/introduction Integriere deine Anwendung mit Fynn über die API, Webhooks und erweiterte Funktionen Fynn bietet umfangreiche Entwickler-Tools, um deine Anwendungen nahtlos mit unserer Plattform zu integrieren. Ob du Zahlungsprozesse automatisieren, Kundendaten synchronisieren oder benutzerdefinierte Workflows erstellen möchtest – hier findest du alle notwendigen Ressourcen. ## Schnellstart Vollständige Dokumentation aller API-Endpunkte mit Beispielen. Generiere API-Schlüssel für die Authentifizierung. ## Integrationsoptionen ### REST API Die Fynn API ermöglicht dir den vollständigen Zugriff auf alle Funktionen der Plattform. Mit der RESTful API kannst du: * **Kunden verwalten**: Erstellen, aktualisieren und abrufen von Kundendaten * **Abonnements steuern**: Abonnements erstellen, ändern und kündigen * **Rechnungen generieren**: Rechnungen erstellen, finalisieren und versenden * **Zahlungen verarbeiten**: Zahlungsmethoden hinzufügen und Transaktionen verwalten * **Produkte konfigurieren**: Katalog mit Produkten und Preisen verwalten Lerne die API-Grundlagen und erkunde alle verfügbaren Endpunkte. ### Webhooks Webhooks ermöglichen es dir, in Echtzeit auf Ereignisse in Fynn zu reagieren. Du erhältst automatisch Benachrichtigungen, wenn: * Ein neuer Kunde erstellt wird * Eine Zahlung eingeht oder fehlschlägt * Ein Abonnement gestartet, geändert oder gekündigt wird * Eine Rechnung erstellt oder bezahlt wird Konfiguriere Webhooks für Echtzeit-Ereignisse. ### OAuth 2.0 Für Anwendungen, die im Namen von Benutzern auf Fynn zugreifen, bieten wir OAuth 2.0 Authentifizierung. Dies ermöglicht: * Sichere Benutzerautorisierung ohne Passwort-Weitergabe * Zugriff auf benutzerspezifische Daten * Single Sign-On (SSO) Integration * OpenID Connect für Identitätsmanagement Implementiere sichere Authentifizierung mit OAuth 2.0. ### Fynn Functions Mit Fynn Functions kannst du die Plattform-Logik erweitern und benutzerdefinierte Regeln implementieren: * **Checkout-Erweiterungen**: Dynamische Lieferkosten, Produktoptionen * **Benutzerdefinierte Validierung**: Eigene Geschäftslogik im Checkout * **Externe API-Integrationen**: Verbindung zu Drittsystemen Erweitere Fynn mit benutzerdefinierten Funktionen. ## Authentifizierung Alle API-Anfragen erfordern eine Authentifizierung mittels API-Schlüssel. Gehe zu [Einstellungen > API-Schlüssel](https://app.fynn.eu/settings/api-tokens) und erstelle einen neuen Schlüssel. Der Schlüssel wird nur einmal angezeigt. Speichere ihn sicher ab. Füge den Schlüssel als Bearer Token im Authorization Header hinzu: ```bash theme={null} curl -H "Authorization: Bearer YOUR_API_KEY" \ https://coreapi.io/v1/customers ``` Teile deinen API-Schlüssel niemals öffentlich. Verwende Umgebungsvariablen, um Schlüssel sicher zu speichern. ## Entwicklungsumgebungen Fynn bietet zwei Umgebungen für die Entwicklung: | Umgebung | API URL | Beschreibung | | -------------- | ---------------------------- | ---------------------------------- | | **Production** | `https://coreapi.io` | Live-Umgebung für Produktionsdaten | | **Preview** | `https://preview.coreapi.io` | Testumgebung für Entwicklung | Nutze die Preview-Umgebung für Tests und Entwicklung, bevor du Änderungen in der Produktion ausrollst. ## Hilfreiche Ressourcen Automatisiere Workflows mit n8n und Fynn. Importiere die API in Postman für schnelles Testen. ## Support Benötigst du Hilfe bei der Integration? Unser Entwickler-Support steht dir zur Verfügung: * **E-Mail**: [hi@fynn.eu](mailto:hi@fynn.eu) * **Termin buchen**: [Beratungsgespräch vereinbaren](https://cal.com/team/fynn/fynn-documentation) # MCP-Server Source: https://docs.fynn.eu/guide/developers/mcp Verbinde KI-Assistenten wie Claude direkt mit Fynn: Kunden anlegen und pflegen, Abonnements einsehen, Angebote vollständig erstellen und versenden, Rechnungen bearbeiten und DATEV-Exporte starten. Der Fynn MCP-Server setzt das [Model Context Protocol](https://modelcontextprotocol.io) um und macht die wichtigsten Fynn-Funktionen für KI-Assistenten wie Claude direkt zugänglich. Statt eine Benutzeroberfläche zu öffnen, beschreibst du, was du brauchst, und der Assistent ruft die passenden Tools auf. Typische Einsatzfälle: * Kunden anlegen, suchen und Stammdaten pflegen * Abonnements und ihre Positionen einsehen, Preise anpassen * Angebote vollständig erstellen, mit Inhalten befüllen und an Empfänger zustellen * Rechnungen erstellen, bearbeiten und zur Freigabe einreichen * DATEV-Cloud-Export per Bestätigungsdialog starten ## Verbindung einrichten ### Endpunkt ``` POST https://coreapi.io/portal/mcp ``` Für die Sandbox-Umgebung ersetze den Host durch `preview.coreapi.io`. ### Transport Der Server verwendet **Streamable HTTP** (MCP-Spezifikation 2025-03-26). MCP-Clients, die dieses Transport-Protokoll unterstützen, verbinden sich direkt mit dem Endpunkt oben. ### Authentifizierung Jede Anfrage benötigt zwei Header: | Header | Wert | | ------------------ | ------------------------ | | `Authorization` | `Bearer ` | | `X-Fynn-Tenant-Id` | UUID der Organisation | Den API-Schlüssel erstellst du unter [Einstellungen > API-Schlüssel](https://app.fynn.eu/settings/api-tokens). Die Organisations-ID findest du in den Einstellungen deiner Organisation. ### Konfigurationsbeispiel Die meisten MCP-Clients (z. B. Claude Desktop) nehmen eine JSON-Konfiguration. Hier ein Beispiel: ```json theme={null} { "mcpServers": { "fynn": { "type": "http", "url": "https://coreapi.io/portal/mcp", "headers": { "Authorization": "Bearer ", "X-Fynn-Tenant-Id": "" } } } } ``` ## Berechtigungen Alle Tools respektieren die Rollen-Berechtigungen des verbundenen Nutzers. Wer in Fynn keine Rechnung lesen darf, bekommt über den MCP-Server auch keine. Die Anfrage schlägt in dem Fall mit einer klaren Fehlermeldung fehl, statt leere Daten zu liefern. *** ## Konventionen Einige Konventionen gelten für alle schreibenden Tools: **Geldbeträge** werden immer als Dezimalstring mit Währung übergeben, nie als Cent-Integer: ```json theme={null} { "amount": "149.00", "currency": "EUR" } ``` **Datumsangaben** sind ISO-8601 mit Zeitzonen-Offset, z. B. `2026-09-01T00:00:00+02:00`. Reine Kalenderdaten (`2026-09-01`) sind bei Datumsfeldern erlaubt; das Tool interpretiert sie als Mitternacht in der Organisations-Zeitzone. **Menschliche Bezeichner** (Kundennummer, Abonummer, Belegnummer) werden neben UUIDs akzeptiert. Du musst IDs nicht vorab nachschlagen, wenn du die lesbare Nummer kennst. **`nextSteps`** in Schreibantworten: Jede erfolgreiche Schreibantwort enthält einen `nextSteps`-Array mit konkreten Hinweisen, welche Tools als nächstes sinnvoll wären. *** ## Tool-Referenz Die folgenden Tools stehen zur Verfügung, gruppiert nach Funktionsbereich. ### Allgemein #### `fynn_ping` Prüft die Verbindung, Authentifizierung und den Organisations-Kontext. Gibt `ok`, die Organisations-ID und einen Zeitstempel zurück. Nimmt keine Parameter entgegen. *** ### Kunden #### `customer_search` Sucht nach Kunden anhand eines Suchbegriffs oder einer Abonummer. | Parameter | Typ | Pflicht | Beschreibung | | -------------------- | ------- | ------- | ------------------------------------------------------------------- | | `search` | string | | Teiltreffer auf Name, Firma, Kundennummer oder DATEV-Debitorenkonto | | `subscriptionNumber` | string | | Abonummer, über die der zugehörige Kunde direkt ermittelt wird | | `page` | integer | | Seitennummer (1-basiert, Standard 1) | | `limit` | integer | | Treffer pro Seite (max. 50, Standard 20) | Gibt Identitätsfelder zurück (ID, Kundennummer, Anzeigename, Typ, Status), keine Adressen oder Kontaktdaten. *** #### `customer_create` Legt einen neuen Kunden an. Typ Firma: `companyName` ist Pflicht. Typ Privatperson: `firstName` und `lastName` sind Pflicht. Ohne `customerNumber` wird die Nummer automatisch vergeben (Normalfall). Vor der Anlage wird geprüft, ob ein Kunde mit gleicher E-Mail oder gleichem Firmennamen bereits existiert. Wenn ja, gibt das Tool den vorhandenen Kunden zurück (`status: "duplicate_warning"`) und legt keinen zweiten an. Mit `allowDuplicate: true` lässt sich die Anlage trotzdem erzwingen. Fehlen Pflichtfelder, kommen die Fehlermeldungen feldbezogen zurück (`status: "validation_error"`). | Parameter | Typ | Pflicht | Beschreibung | | ---------------- | ------- | ------- | ---------------------------------------------------- | | `email` | string | ja | Rechnungs- und Kommunikations-E-Mail | | `companyName` | string | | Firmenname (Pflicht für Firmenkunden) | | `firstName` | string | | Vorname (Pflicht für Privatpersonen) | | `lastName` | string | | Nachname (Pflicht für Privatpersonen) | | `gender` | string | | `male`, `female` oder `diverse` | | `vatId` | string | | USt-IdNr., z. B. `DE123456789` | | `phone` | string | | Telefonnummer | | `street` | string | | Straße | | `houseNumber` | string | | Hausnummer | | `zip` | string | | Postleitzahl | | `city` | string | | Ort | | `countryCode` | string | | ISO-3166-1 alpha-2, z. B. `DE` (Standard `DE`) | | `addition` | string | | Adresszusatz | | `invoiceEmail` | string | | Separate Rechnungs-E-Mail | | `customerNumber` | string | | Kundennummer (ohne Angabe automatisch vergeben) | | `language` | string | | `de` oder `en` (ohne Angabe aus dem Land abgeleitet) | | `currencyCode` | string | | Währungscode, z. B. `EUR` | | `timeZone` | string | | Zeitzone, z. B. `Europe/Berlin` | | `taxExempt` | string | | `auto` oder `exempt` (Standard `auto`) | | `allowDuplicate` | boolean | | `true` erzwingt die Anlage trotz Dublettenverdacht | Gibt `{ status, customer, nextSteps }` zurück. Berechtigung: `customer:write`. *** #### `customer_update` Aktualisiert die Stammdaten eines bestehenden Kunden. Nur mitgesendete Felder werden geändert; fehlende Felder bleiben unverändert. Kundennummer, DATEV-Debitorenkonto und Vertriebskanal-Bezug können nicht geändert werden. Adresse, Rechnungs-E-Mail und Kundenstatus (Archivierung) sind nicht Teil dieses Stammdaten-Updates. | Parameter | Typ | Pflicht | Beschreibung | | -------------- | ------ | ------- | ------------------------------------------- | | `customerId` | string | ja | UUID des zu ändernden Kunden | | `companyName` | string | | Neuer Firmenname | | `firstName` | string | | Neuer Vorname | | `lastName` | string | | Neuer Nachname | | `vatId` | string | | Neue USt-IdNr. | | `phone` | string | | Neue Telefonnummer | | `language` | string | | Neue Sprache (`de` oder `en`) | | `currencyCode` | string | | Neuer Währungscode | | `countryCode` | string | | Neues Land (ISO-3166-1 alpha-2) | | `timeZone` | string | | Neue Zeitzone | | `gender` | string | | Neue Anrede (`male`, `female`, `diverse`) | | `taxExempt` | string | | Neue Steuerbefreiung (`auto` oder `exempt`) | Gibt `{ status, customer, nextSteps }` zurück. Berechtigung: `customer:write`. *** #### `customer_balance` Liefert den Debitorensaldo eines Kunden. Ohne Zeitraum den aktuellen Gesamtsaldo, mit Zeitraum zusätzlich Soll-/Haben-Summen. Beträge sind in Cent mit Währungsangabe. | Parameter | Typ | Pflicht | Beschreibung | | ------------ | ------ | ------- | ------------------------------------------------------------ | | `customerId` | string | ja | UUID des Kunden | | `yearMonth` | string | | Monat im Format `YYYY-MM`, z. B. `2026-01` | | `from` | string | | Untere Datumsgrenze `YYYY-MM-DD` (alternativ zu `yearMonth`) | | `to` | string | | Obere Datumsgrenze `YYYY-MM-DD` (alternativ zu `yearMonth`) | *** #### `customer_payments` Listet Zahlungstransaktionen eines Kunden, neueste zuerst. Enthält Datum, Betrag (Cent), Status, Zahlungsart und Belegnummer, jedoch keine Bankdaten oder IBAN. | Parameter | Typ | Pflicht | Beschreibung | | ------------ | ------- | ------- | ----------------------------------------- | | `customerId` | string | ja | UUID des Kunden | | `dateFrom` | string | | Untere Datumsgrenze `YYYY-MM-DD` | | `dateTo` | string | | Obere Datumsgrenze `YYYY-MM-DD` | | `page` | integer | | Seitennummer (Standard 1) | | `limit` | integer | | Treffer pro Seite (max. 100, Standard 25) | *** ### Abonnements Die Abo-Tools sind rein lesend und dienen dazu, den aktuellen Bestand einzusehen, bevor mit `update_subscription_prices` Preise angepasst werden. Alle Ergebnisse sind auf die Organisation beschränkt. Berechtigung: `subscription:read`. #### `subscription_search` Sucht Abonnements der Organisation. Menschliche Bezeichner werden aufgelöst: statt der Kunden-UUID kann die Kundennummer angegeben werden. | Parameter | Typ | Pflicht | Beschreibung | | -------------------- | ------- | ------- | ------------------------------------------------------------------------------ | | `customerId` | string | | UUID des Kunden, dessen Abos gesucht werden | | `customerNumber` | string | | Kundennummer (Alternative zu `customerId`) | | `subscriptionNumber` | string | | Abonummer (exakter Treffer) | | `status` | string | | Abo-Status, z. B. `active`, `cancelled`, `paused` | | `productId` | string | | UUID eines Produkts, findet Abos mit mindestens einer Position dieses Produkts | | `page` | integer | | Seitennummer (Standard 1) | | `limit` | integer | | Treffer pro Seite (max. 50, Standard 20) | Gibt pro Treffer zurück: ID, Nummer, Kunde (ID, Kundennummer, Anzeigename), Status, Vertragsbeginn/-ende, Abrechnungsintervall, Anzahl Positionen und den wiederkehrenden Netto-Monatsbetrag. Beträge als `{ amount, currency }`. *** #### `subscription_get` Liest ein Abonnement im Detail. Entweder `subscriptionId` (UUID) oder `subscriptionNumber` (Abonummer) angeben. | Parameter | Typ | Pflicht | Beschreibung | | -------------------- | ------ | ------- | ------------------------------------------- | | `subscriptionId` | string | | UUID des Abonnements | | `subscriptionNumber` | string | | Abonummer (Alternative zu `subscriptionId`) | Gibt zurück: Kopfdaten (ID, Nummer, Status, Kunde, Vertragsbeginn/-ende, Abrechnungsintervall, PO-Nummer, Probelaufende), Vertragsperioden (Anzahl, Laufzeit, Kündigungsfrist), Summen (Anzahl Positionen, wiederkehrender Netto-Monatsbetrag) und eine kompakte Positionsübersicht. Vollständige Positionsdetails liefert `subscription_items`. *** #### `subscription_items` Liest die Positionen eines Abonnements im Detail. Gleiche Eingabe wie `subscription_get`. | Parameter | Typ | Pflicht | Beschreibung | | -------------------- | ------ | ------- | ------------------------------------------- | | `subscriptionId` | string | | UUID des Abonnements | | `subscriptionNumber` | string | | Abonummer (Alternative zu `subscriptionId`) | Gibt je Position zurück: ID, Status, Produkt, Preisplan, Preismodell, Menge, Stückpreis (null bei tiered/volume/percentage), wiederkehrender Netto-Monatsbetrag, Rabatte (Name, Typ, Prozent, Fixbetrag, Frequenz, Befristung, Status) und Laufzeitfenster. *** #### `update_subscription_prices` Bereitet eine Preisänderung für **alle passenden Abos eines Kunden** vor und legt eine Freigabe-Aufgabe in der App-Inbox an. Die Preise werden dabei **nicht** direkt geändert. Ein typischer Auftrag lautet: „Setze alle Abos von Kunde XY auf 0,89 € monatlich." Da sich das Abrechnungsintervall eines laufenden Abos nicht ändern lässt, erfolgt die Anpassung als Transfer-Leistung: Das Intervall bleibt bestehen, nur der Betrag wird angepasst. Ein jährlich abgerechnetes Abo wird auf das Zwölffache des Monatspreises gesetzt (0,89 € monatlich ergeben 10,68 € jährlich), ein monatliches auf den Monatspreis selbst. Der monatlich wiederkehrende Umsatz (MRR) wird dabei direkt fortgeschrieben. Geändert werden nur laufende, wiederkehrende Positionen mit festem Preis (Flat Fee) oder Preis pro Einheit (Per Unit) in der Zielwährung; der Preistyp bleibt dabei erhalten. Bei Per-Unit-Positionen wird der Preis pro Einheit gesetzt, die monatliche MRR ergibt sich aus Menge mal Einheitspreis. Alle übrigen Positionen werden mit Begründung als übersprungen ausgewiesen und bleiben unverändert. Der Ablauf ist zweistufig: Der KI-Assistent erstellt die Vorschau und die Freigabe-Aufgabe, ein Mensch prüft und genehmigt sie anschließend in der App-Inbox. Erst nach der manuellen Freigabe werden die Preise tatsächlich geändert. Ändern sich die Abos des Kunden zwischen Anfrage und Freigabe, wird die Freigabe abgelehnt und muss neu angefordert werden. Freigabe-Anfragen verfallen 72 Stunden nach der Erstellung. | Parameter | Typ | Pflicht | Beschreibung | | ----------------------- | ------ | ------- | ----------------------------------------------------------------------------------------------------------------- | | `customerId` | string | ja | UUID des Kunden | | `targetMonthlyNetPrice` | number | ja | Monatlicher Netto-Zielpreis in Euro (z. B. `0.89`). Jährlich abgerechnete Abos werden auf das Zwölffache gesetzt. | | `currency` | string | | ISO-Währungscode (Standard: Währung des Kunden). Abos mit abweichender Währung werden übersprungen. | Gibt `{ actionItemId, status: "pending_approval", customerId, targetMonthlyNetPrice, currency, summary, hint }` zurück. `summary` enthält die Kundendaten, die Anzahl der zu ändernden und der übersprungenen Positionen sowie je Position das Produkt, das Abrechnungsintervall, den bisherigen und den neuen Betrag, die bisherige und die neue monatliche MRR und das Datum, ab dem die Änderung gilt. Gibt es keine passende Position, kommt eine klare Fehlermeldung und es wird keine Aufgabe angelegt. Mit `pending_action_status` (Parameter `actionItemId`) fragst du den Freigabestatus ab. Berechtigung: `subscription:write`. *** ### Rechnungen #### `invoice_search` Sucht Belege (Rechnungen, Gutschriften, Stornos). Filterbar nach Status, Belegtyp, Kunde und Finalisierungszeitraum. Beträge in Cent, Daten als ISO-8601. | Parameter | Typ | Pflicht | Beschreibung | | ----------------- | ------- | ------- | ------------------------------------------------------------------------------ | | `search` | string | | Teiltreffer auf Belegnummer oder Kundennummer | | `statuses` | array | | Belegstatus, z. B. `["STATUS_PAID", "STATUS_UNPAID"]` | | `type` | string | | Belegtyp: `TYPE_INVOICE`, `TYPE_CREDIT`, `TYPE_CANCEL`, `TYPE_REFUND` | | `customerId` | string | | UUID des Kunden | | `finalizedAfter` | string | | Untere Datumsgrenze `YYYY-MM-DD` | | `finalizedBefore` | string | | Obere Datumsgrenze `YYYY-MM-DD` | | `sort` | string | | Sortierfeld: `finalizationDate`, `number`, `dueDate`, `creationDate`, `status` | | `sortDirection` | string | | `asc` oder `desc` (Standard `desc`) | | `page` | integer | | Seitennummer (Standard 1) | | `limit` | integer | | Treffer pro Seite (max. 100, Standard 20) | *** #### `invoice_reference_chain` Löst die Storno-/Referenzkette eines Belegs auf. Gibt den Beleg selbst, den referenzierten Ursprungsbeleg sowie alle Stornos/Gutschriften zurück, die auf diesen Beleg verweisen. | Parameter | Typ | Pflicht | Beschreibung | | --------------- | ------ | ------- | --------------------------------------- | | `invoiceId` | string | | UUID des Belegs | | `invoiceNumber` | string | | Belegnummer (alternativ zu `invoiceId`) | *** #### `invoice_pdf_download` Erstellt einen zeitlich begrenzten Download-Link für die PDF-Datei eines Belegs. Gibt `url`, `filename` und `expiresAt` zurück, keine Binärdaten. | Parameter | Typ | Pflicht | Beschreibung | | -------------- | ------- | ------- | -------------------------------------------------------- | | `invoiceId` | string | ja | UUID des Belegs | | `secondsValid` | integer | | Gültigkeitsdauer in Sekunden (60 bis 3600, Standard 300) | *** #### `invoices_zip_download` Bündelt die PDFs mehrerer Belege in ein ZIP-Archiv und gibt einen signierten Download-Link zurück. Belege ohne PDF werden übersprungen. | Parameter | Typ | Pflicht | Beschreibung | | ----------------- | ------ | ------- | ------------------------------------------------ | | `finalizedAfter` | string | | Untere Datumsgrenze `YYYY-MM-DD` | | `finalizedBefore` | string | | Obere Datumsgrenze `YYYY-MM-DD` | | `statuses` | array | | Belegstatus-Filter | | `type` | string | | Belegtyp-Filter | | `customerId` | string | | UUID des Kunden | | `zipName` | string | | Optionaler Name des ZIP-Archivs ohne Dateiendung | ### Rechnungen erstellen und bearbeiten Die schreibenden Rechnungs-Tools erfordern die Berechtigung `invoice:write`. Eine Rechnung durchläuft dabei einen klaren Lebenszyklus: Anlegen als Entwurf, Positionen hinzufügen und bearbeiten, und schließlich Finalisieren oder Schließen. Eine finalisierte Rechnung ist unveränderlich und rechtlich bindend; für die Finalisierung ist daher eine manuelle Freigabe durch einen Menschen erforderlich. #### `invoice_create` Legt eine neue Rechnung im Status Entwurf an. Positionen werden nicht hier, sondern anschließend mit `invoice_add_position` oder `invoice_add_product_position` hinzugefügt. | Parameter | Typ | Pflicht | Beschreibung | | -------------- | ------ | ------- | ------------------------------------------------------------------------------------------------- | | `customerId` | string | ja | UUID des Kunden. Der Kunde muss aktiv sein. | | `currencyCode` | string | | Währungscode, z. B. `"EUR"`. Ohne Angabe die Standardwährung des Kunden. | | `dueDate` | string | | Fälligkeitsdatum im Format `YYYY-MM-DD`. Ohne Angabe die Standard-Zahlungsfrist der Organisation. | | `title` | string | | Rechnungstitel. Ohne Angabe der Titel aus der Standard-Rechnungsvorlage. | | `introduction` | string | | Einleitungstext. | | `closing` | string | | Schlusstext. | | `internalNote` | string | | Interne Notiz (nicht auf dem Beleg sichtbar). | Gibt die neue Entwurfs-Rechnung mit Kopfdaten, Positionen und Summen (in Cent) zurück. *** #### `invoice_get` Liest eine Rechnung mit Kopfdaten, Positionen und Summen. Die Rechnungs-ID kann eine UUID oder eine Belegnummer sein. | Parameter | Typ | Pflicht | Beschreibung | | ----------- | ------ | ------- | --------------------------------------- | | `invoiceId` | string | ja | UUID der Rechnung oder die Belegnummer. | Gibt zurück: Kopfdaten (id, number, status, type, customer, currencyCode, dueDate, finalizedAt, title, introduction, closing, internalNote), Summen (`totals.net`/`tax`/`gross` in Cent), Positionen und ein `editable`-Kennzeichen. *** #### `invoice_update` Aktualisiert die Kopf-Felder einer noch nicht finalisierten Rechnung. Nur mitgesendete Felder werden geändert; fehlende Felder bleiben unverändert. | Parameter | Typ | Pflicht | Beschreibung | | ------------------- | ------ | ------- | --------------------------------------------------------------- | | `invoiceId` | string | ja | UUID der Rechnung. | | `title` | string | | Neuer Titel. | | `introduction` | string | | Neuer Einleitungstext. | | `closing` | string | | Neuer Schlusstext. | | `internalNote` | string | | Interne Notiz. | | `dueDate` | string | | Fälligkeitsdatum im Format `YYYY-MM-DD`. | | `customerAddressId` | string | | UUID einer bestehenden Kundenadresse als neue Rechnungsadresse. | | `paymentMethodId` | string | | UUID einer bestehenden Zahlungsart des Kunden. | Gibt die aktualisierte Rechnung zurück (gleiche Struktur wie `invoice_get`). *** #### `invoice_add_position` Fügt einer Entwurfs-Rechnung eine frei definierte Position hinzu. Preis und Steuergruppe sind immer explizit anzugeben. | Parameter | Typ | Pflicht | Beschreibung | | -------------------- | ------ | ------- | ---------------------------------------------------------------------------- | | `invoiceId` | string | ja | UUID der Entwurfs-Rechnung. | | `name` | string | ja | Bezeichnung der Position. | | `unitId` | string | ja | UUID der Einheit. | | `unitPrice` | string | ja | Netto-Einzelpreis als String im Format `"12.34"` (Punkt als Trennzeichen). | | `taxGroupId` | string | ja | UUID der Steuergruppe. | | `quantity` | number | | Menge (Standard 1, kann negativ sein). | | `description` | string | | Optionale Positionsbeschreibung. | | `discountPercentage` | number | | Rabatt in Prozent (0-100). Schließt `discountFixed` aus. | | `discountFixed` | string | | Fester Netto-Rabatt als String `"12.34"`. Schließt `discountPercentage` aus. | | `serviceDateFrom` | string | | Leistungszeitraum-Beginn `YYYY-MM-DD`. Nur gemeinsam mit `serviceDateTo`. | | `serviceDateTo` | string | | Leistungszeitraum-Ende `YYYY-MM-DD`. Nur gemeinsam mit `serviceDateFrom`. | | `productId` | string | | UUID eines Produkts für Statistikzwecke (keine Preisableitung). | Gibt `{ positionId, invoice }` zurück, wobei `invoice` die aktualisierte Rechnung mit Summen in Cent enthält. *** #### `invoice_add_product_position` Leitet eine Rechnungsposition aus einem Produkt im Katalog ab. Bezeichnung, Einheit und Steuergruppe stammen aus dem Produkt; der Preis kommt entweder aus einem Flat-Fee-Preisplan oder aus einem expliziten Preis-Override. Ein Preis wird nie geraten. Fehlt sowohl ein passender Preisplan als auch ein `unitPrice`-Override, lehnt das Tool die Anfrage mit einer klaren Fehlermeldung ab. | Parameter | Typ | Pflicht | Beschreibung | | ------------- | ------ | ------- | ---------------------------------------------------------------------------- | | `invoiceId` | string | ja | UUID der Entwurfs-Rechnung. | | `productId` | string | ja | UUID des Produkts, aus dem die Position abgeleitet wird. | | `pricePlanId` | string | | UUID eines Flat-Fee-Preisplans des Produkts für die Preisableitung. | | `unitPrice` | string | | Preis-Override als String `"12.34"`. Hat Vorrang vor dem Preisplan. | | `quantity` | number | | Menge (Standard 1). | | `taxGroupId` | string | | Override der Steuergruppe (UUID). Ohne Angabe die Steuergruppe des Produkts. | | `name` | string | | Override der Positionsbezeichnung. Ohne Angabe der Produktname. | Gibt `{ positionId, invoice }` zurück (Summen in Cent). *** #### `invoice_update_position` Aktualisiert eine Position einer bearbeitbaren Rechnung. Nur mitgesendete Felder werden geändert. | Parameter | Typ | Pflicht | Beschreibung | | -------------------- | ------ | ------- | --------------------------------------------------------------------------- | | `invoiceId` | string | ja | UUID der Rechnung. | | `positionId` | string | ja | UUID der zu ändernden Position. | | `name` | string | | Neuer Positionsname. | | `quantity` | number | | Neue Menge. | | `unitPrice` | string | | Neuer Netto-Einzelpreis als String `"12.34"`. | | `taxGroupId` | string | | UUID der Steuergruppe. | | `description` | string | | Neue Positionsbeschreibung. | | `discountPercentage` | number | | Rabatt in Prozent (0-100). Schließt `discountFixed` aus. | | `discountFixed` | string | | Fester Netto-Rabatt als String `"5.00"`. Schließt `discountPercentage` aus. | | `serviceDateFrom` | string | | Leistungsdatum von (`YYYY-MM-DD`). | | `serviceDateTo` | string | | Leistungsdatum bis (`YYYY-MM-DD`). | Gibt `{ positions[], totals }` zurück (Beträge in Cent). *** #### `invoice_remove_position` Entfernt eine Position von einer bearbeitbaren Rechnung. Die verbleibenden Positionen werden neu nummeriert und die Summen neu berechnet. | Parameter | Typ | Pflicht | Beschreibung | | ------------ | ------ | ------- | ---------------------------------- | | `invoiceId` | string | ja | UUID der Rechnung. | | `positionId` | string | ja | UUID der zu entfernenden Position. | Gibt `{ positions[], totals }` zurück (Beträge in Cent). *** #### `invoice_close` Schließt eine Rechnung endgültig, ohne sie zu finalisieren. Der Beleg erhält den Status `STATUS_CLOSED` und wird verworfen: keine Belegnummer, kein PDF, keine Zahlung. Nur aus den Status Entwurf (`STATUS_DRAFT`) oder `STATUS_NEW` heraus möglich. | Parameter | Typ | Pflicht | Beschreibung | | ----------- | ------ | ------- | ---------------------------------------- | | `invoiceId` | string | ja | UUID der Rechnung. | | `reason` | string | | Optionaler Kommentar (max. 255 Zeichen). | Gibt `{ id, status }` zurück. *** #### `invoice_finalize` Bereitet die Finalisierung einer Rechnung vor und legt eine Freigabe-Aufgabe in der App-Inbox an. Die Rechnung wird dabei **nicht** direkt finalisiert. Da eine finalisierte Rechnung rechtlich bindend und unveränderlich ist, läuft die Finalisierung zweistufig ab: Der KI-Assistent prüft, ob die Rechnung finalisierbar ist (gültige Zahlungsart, aktiver Kunde), und legt dann eine Freigabe-Aufgabe an. Ein Mensch prüft und genehmigt diese anschließend in der App-Inbox. Erst nach der manuellen Freigabe wird die Rechnung tatsächlich finalisiert. Ein zweiter Aufruf für dieselbe Rechnung liefert die bereits vorhandene offene Aufgabe zurück, sofern die Rechnung seit der ersten Anfrage nicht verändert wurde; die Parameter der ursprünglichen Anfrage bleiben dabei bestehen. Wurde die Rechnung geändert, wird die alte Aufgabe verworfen und eine neue mit neuer `actionItemId` angelegt. Freigabe-Anfragen verfallen 72 Stunden nach der Erstellung und müssen dann erneut gestellt werden. | Parameter | Typ | Pflicht | Beschreibung | | ----------- | ------- | ------- | ----------------------------------------------------------------------------------------------------------- | | `invoiceId` | string | ja | UUID der Rechnung. | | `dueDate` | string | | Fälligkeitsdatum im Format `YYYY-MM-DD`. Ohne Angabe gilt die Standard-Zahlungsfrist bei der Finalisierung. | | `sendEmail` | boolean | | Ob bei der Freigabe eine E-Mail an den Kunden gesendet wird (Standard: `true`). | Gibt `{ actionItemId, status: "pending_approval", invoiceId, summary, hint }` zurück, wobei `summary` Gesamtbeträge (Netto, Steuer, Brutto in Cent), Anzahl Positionen und Kundendaten enthält, und `hint` den Hinweis auf die notwendige manuelle Freigabe in der Inbox. Mit `pending_action_status` (Parameter `actionItemId`) kannst du den Freigabestatus und das Ablaufdatum abfragen. Berechtigung: `invoice:finalize`. *** #### `pending_action_status` Fragt den Status einer Freigabe-Aufgabe ab, zum Beispiel einer per `invoice_finalize` angelegten Rechnungsfreigabe. | Parameter | Typ | Pflicht | Beschreibung | | -------------- | ------ | ------- | ------------------------------------------------- | | `actionItemId` | string | ja | UUID der Freigabe-Aufgabe aus `invoice_finalize`. | Gibt `{ id, type, status, createdAt, resolvedAt, expiresAt, invoiceId, executions }` zurück. `expiresAt` ist der Zeitpunkt (UTC), zu dem die Freigabe-Anfrage abläuft; danach muss sie per `invoice_finalize` neu angefordert werden. Mögliche Werte für `status`: `open`, `snoozed`, `in_progress`, `resolved`, `dismissed`. Jeder Eintrag in `executions` enthält `actionKey` (z. B. `approve` oder `reject`), `resultStatus` (`success` oder `failure`), `resultMessage` und `executedAt`. Bei erfolgreicher Freigabe steht in `resultMessage` die vergebene Belegnummer. Schlägt die Freigabe fehl, weil die Rechnung nach der Anfrage geändert wurde oder die Anfrage abgelaufen ist, enthält `resultMessage` den Grund; die Rechnung bleibt in dem Fall unfinalisiert. Berechtigung: `action-item:read`. *** #### `invoice_write_off_small_difference` Bucht einen geringfügigen Restbetrag (Kleinstbetragsdifferenz) auf einer finalisierten, noch nicht bezahlten Rechnung aus, sodass die Rechnung als vollständig bezahlt gilt. Es wird keine E-Mail an den Kunden verschickt. Voraussetzungen: Die Rechnung muss finalisiert und unbezahlt oder gemahnt sein. Der offene Betrag muss kleiner als der konfigurierte Kleinstbetrag-Schwellenwert sein und größer als 0. | Parameter | Typ | Pflicht | Beschreibung | | ----------- | ------ | ------- | ------------------------------- | | `invoiceId` | string | ja | UUID der finalisierten Rechnung | Berechtigung: `invoice:write`. *** ## Rechnung mit KI erstellen und finalisieren: ein typischer Ablauf So erstellst du mit einem KI-Assistenten eine vollständige Rechnung und sendest sie zur Freigabe: Lege eine neue Rechnung für den gewünschten Kunden an: ```json theme={null} { "tool": "invoice_create", "arguments": { "customerId": "", "title": "Leistungen Juli 2026", "dueDate": "2026-08-15" } } ``` Die Antwort enthält die `invoiceId`, die du für alle weiteren Aufrufe benötigst. Füge Positionen aus dem Katalog oder frei definierte Positionen hinzu: ```json theme={null} { "tool": "invoice_add_product_position", "arguments": { "invoiceId": "", "productId": "", "pricePlanId": "", "quantity": 5 } } ``` Beachte: `unitPrice` kommt immer aus dem Preisplan oder einem expliziten Override, nie aus einer Schätzung. Lies die aktuelle Rechnung mit allen Positionen und Summen, bevor du die Finalisierung anforderst: ```json theme={null} { "tool": "invoice_get", "arguments": { "invoiceId": "" } } ``` Erstelle die Freigabe-Aufgabe. Die Rechnung wird **noch nicht** finalisiert: ```json theme={null} { "tool": "invoice_finalize", "arguments": { "invoiceId": "", "sendEmail": true } } ``` Die Antwort enthält `actionItemId`, `status: "pending_approval"`, eine Zusammenfassung der Rechnung und einen `hint`-Text. Informiere die Nutzerin oder den Nutzer, dass die Freigabe in der App-Inbox wartet. Ein Mitarbeiter öffnet die Inbox, prüft die Rechnung und gibt sie frei oder lehnt sie ab. Dieser Schritt findet ausschließlich in der App statt und kann nicht durch den KI-Assistenten übersprungen werden. Frage den Freigabestatus ab, bis die Aufgabe bearbeitet wurde: ```json theme={null} { "tool": "pending_action_status", "arguments": { "actionItemId": "" } } ``` Bei `status: "resolved"` und `executions[0].resultStatus: "success"` ist die Rechnung finalisiert; `resultMessage` enthält die Belegnummer. Bei `resultStatus: "failure"` wurde die Rechnung nicht finalisiert (z. B. weil sie nach der Anfrage geändert wurde); erstelle in dem Fall eine neue Freigabe-Anfrage. Eine genehmigte Rechnung ist rechtlich bindend und unveränderlich. Die manuelle Freigabe kann nicht aus dem MCP-Server heraus umgangen werden. *** ## Audit Jeder Tool-Aufruf über den MCP-Server wird automatisch protokolliert: Nutzerkonto, Organisation, Tool-Name, Parameter (ohne sensible Inhalte), Ergebnis und Ausführungsdauer. Der Audit-Log ist unveränderlich und dient der Nachvollziehbarkeit für Compliance-Anforderungen. Auch fehlgeschlagene oder abgelehnte Aufrufe werden erfasst. *** ### DATEV #### `datev_export_status` Zeigt, ob ein DATEV-Cloud-Konto verbunden ist, und liefert für jeden Monat eine Zusammenfassung der exportierten und offenen Buchungen sowie den letzten Export-Status. | Parameter | Typ | Pflicht | Beschreibung | | ------------ | ------- | ------- | ---------------------------------------------------------------------- | | `monthsBack` | integer | | Anzahl Monate rückwärts für die Übersicht (1 bis 36, Standard 12) | | `yearMonth` | string | | Monat `YYYY-MM`, für den die einzelnen Export-Läufe aufgelistet werden | *** #### `datev_cloud_export_start` Startet einen DATEV-Cloud-Export für einen oder mehrere Monate. Dieses Tool verändert Daten. Ohne `confirm: true` kommt eine Rückfrage zur Bestätigung zurück, es wird nichts ausgeführt. | Parameter | Typ | Pflicht | Beschreibung | | ------------ | ------- | ------- | -------------------------------------------------------------- | | `yearMonth` | string | | Einzelner Monat `YYYY-MM` | | `yearMonths` | array | | Liste von Monaten `YYYY-MM` (alternativ zu `yearMonth`) | | `confirm` | boolean | | Muss `true` sein, um den Export tatsächlich zu starten | | `sendAgain` | boolean | | Auch erneut senden, wenn bereits exportiert (Standard `false`) | *** ### Produktkatalog #### `product_tree` Liefert den Produktkatalog als Kategorie-Baum. Jeder Knoten enthält `id`, `name`, `path`, `count` (Anzahl Produkte) und `children`. Mit `includeProducts: true` zusätzlich eine flache Produktliste. | Parameter | Typ | Pflicht | Beschreibung | | ----------------- | ------- | ------- | ------------------------------------------------------------------- | | `includeProducts` | boolean | | Wenn `true`, zusätzlich eine flache Produktliste (Standard `false`) | | `locale` | string | | Sprache für Produkt- und Einheitennamen, z. B. `"de"` oder `"en"` | *** #### `product_search` Sucht Produkte im Katalog. Teiltreffer auf Produktname, internen Namen und Produktnummer. | Parameter | Typ | Pflicht | Beschreibung | | ----------------- | ------- | ------- | ---------------------------------------------------- | | `query` | string | | Suchbegriff | | `familyId` | string | | UUID einer Produktkategorie | | `includeArchived` | boolean | | Archivierte Produkte einschließen (Standard `false`) | | `limit` | integer | | Maximale Trefferzahl (max. 50, Standard 20) | | `offset` | integer | | Offset für die Paginierung (Standard 0) | | `locale` | string | | Sprache für Namen, z. B. `"de"` oder `"en"` | *** #### `product_prices` Liefert alle Preispläne eines Produkts in vollständiger Form. Die zurückgegebene Preisplan-ID ist genau die `pricePlan`-Referenz, die ein Angebots-Produkteintrag (`subscriptionProposal`) benötigt. Alle Beträge sind ganzzahlige Cent. | Parameter | Typ | Pflicht | Beschreibung | | ----------- | ------ | ------- | ----------------- | | `productId` | string | ja | UUID des Produkts | Je Preisplan wird zurückgegeben: `id`, `name`, `internalName`, `status`, `currency`, `chargeType`, `billingInterval`, `billingFrequency`, `payInAdvance`, `proRata`, `freeUnits`, `minimumCommitment` und ein `price`-Block mit den Beträgen in Cent. *** ### Angebote Die Angebots-Tools sind in drei Gruppen aufgeteilt: Lesen, Inhalte aufbauen (Intent-Tools) und Zustellen. Lesende Tools benötigen `offer:read`, schreibende `offer:write`. Angenommene oder archivierte Angebote sind unveränderlich. **Intent-Tools** (`offer_set_content`, `offer_add_section`, `offer_set_pricing`, `offer_set_parties`, `offer_set_signature`, `offer_set_letterhead`) nehmen fachliche Eingaben entgegen und lassen den Server die interne Dokument-Repräsentation aufbauen. Du schreibst dabei niemals Tiptap/ProseMirror-JSON und keine Preis-Snapshots von Hand. Jede Schreibantwort dieser Tools enthält das gerechnete Preis-View-Model, sodass du sofort siehst, ob Preise und Rabatte korrekt greifen. **Zustellungs-Tools** (`offer_publish`, `offer_add_recipient`, `offer_list_recipients`, `offer_remove_recipient`, `offer_preview_link`, `offer_download_pdf`, `offer_activities`) verwalten den Versand an Empfänger. `offer_add_recipient` ist ausgehend: es verschickt eine echte E-Mail. Frage daher vor dem Aufruf ausdrücklich nach, ob an genau diese Person zugestellt werden soll. #### `offer_block_types` Listet alle unterstützten Block-Typen mit Metadaten auf (ob der Block atomar ist, ob er in PDF und Dokument erlaubt ist, und welche Attribute er akzeptiert). Mit optionalem `type` kommt zusätzlich ein konkretes Beispiel-Node zurück, das direkt an `offer_add_block` übergeben werden kann. | Parameter | Typ | Pflicht | Beschreibung | | --------- | ------ | ------- | ------------------------------------------------------ | | `type` | string | | Block-Typ, z. B. `"heading"`, `"subscriptionProposal"` | *** #### `offer_get` Liest den Zustand eines Angebots effizient: Einstellungen (ID, Nummer, Name, Status, Anzeigesprache, Kunde, Gültigkeitsdatum, Annahme-Modus, Variablen) und eine kompakte Abschnitts- und Block-Übersicht. Mit `sectionIndex` (und optional `blockIndex`) wird zusätzlich der rohe JSON-Body genau dieses Abschnitts oder Blocks zurückgegeben. | Parameter | Typ | Pflicht | Beschreibung | | -------------- | ------- | ------- | ------------------------------------------------ | | `offerId` | string | ja | ULID des Angebots | | `sectionIndex` | integer | | 0-basierter Abschnitts-Index für den rohen Body | | `blockIndex` | integer | | 0-basierter Block-Index innerhalb des Abschnitts | *** #### `offer_create` Legt ein neues Angebot an. Alle Parameter sind optional: ein Angebot ohne Kunde ist ausdrücklich erlaubt. | Parameter | Typ | Pflicht | Beschreibung | | ---------------- | ------ | ------- | ----------------------------------------------- | | `customerId` | string | | UUID des Kunden | | `name` | string | | Angebotstitel | | `locale` | string | | Anzeigesprache, z. B. `"de"`, `"en"`, `"de-DE"` | | `validUntil` | string | | Gültigkeitsdatum ISO-8601, z. B. `2026-12-31` | | `salesChannelId` | string | | UUID oder technischer Name des Vertriebskanals | | `templateId` | string | | UUID einer Angebotsvorlage | *** #### `offer_update` Aktualisiert die Einstellungen eines Angebots. Nur mitgesendete Felder werden geändert; fehlende Felder bleiben unverändert. | Parameter | Typ | Pflicht | Beschreibung | | ----------------- | ------ | ------- | ------------------------------------------------------- | | `offerId` | string | ja | ULID des Angebots | | `name` | string | | Neuer Angebotstitel | | `locale` | string | | Neue Anzeigesprache | | `validUntil` | string | | Neues Gültigkeitsdatum (leerer String löscht das Datum) | | `acceptanceMode` | string | | `click`, `esignature` oder `print` | | `customVariables` | object | | Eigene Variablen als flaches Objekt | *** #### `offer_add_block` Fügt einen Block in einen Angebots-Abschnitt ein. Den gültigen Block-Node erhältst du über `offer_block_types`. Hat das Angebot noch keine Abschnitte, wird automatisch einer angelegt. | Parameter | Typ | Pflicht | Beschreibung | | -------------- | ------- | ------- | --------------------------------------------------------- | | `offerId` | string | ja | ULID des Angebots | | `block` | object | ja | Tiptap-Node mit `type` und optional `attrs`/`content` | | `sectionIndex` | integer | | 0-basierter Abschnitts-Index (Standard 0) | | `position` | integer | | Einfüge-Position im Abschnitt (Standard: am Ende anfügen) | *** #### `offer_update_block` Ersetzt einen bestehenden Block vollständig durch den übergebenen Tiptap-Node. | Parameter | Typ | Pflicht | Beschreibung | | -------------- | ------- | ------- | ---------------------------- | | `offerId` | string | ja | ULID des Angebots | | `sectionIndex` | integer | ja | 0-basierter Abschnitts-Index | | `blockIndex` | integer | ja | 0-basierter Block-Index | | `block` | object | ja | Neuer Tiptap-Node | *** #### `offer_remove_block` Entfernt einen Block aus einem Abschnitt; die nachfolgenden Blöcke rücken auf. | Parameter | Typ | Pflicht | Beschreibung | | -------------- | ------- | ------- | ---------------------------- | | `offerId` | string | ja | ULID des Angebots | | `sectionIndex` | integer | ja | 0-basierter Abschnitts-Index | | `blockIndex` | integer | ja | 0-basierter Block-Index | *** #### `offer_upload_image` Lädt ein Bild für die Verwendung in Angeboten hoch. Erlaubt sind PNG, JPEG, WebP und GIF (max. 5 MB, dekodiert). Der MIME-Typ wird aus den Bilddaten erkannt; die Dateiendung wird entsprechend erzwungen. SVG wird abgelehnt. Die Antwort enthält `mediaId`, `url`, `filename` und einen fertigen `imageBlock`, der direkt an `offer_add_block` übergeben werden kann. | Parameter | Typ | Pflicht | Beschreibung | | ---------- | ------ | ------- | ----------------------------------------------- | | `filename` | string | ja | Dateiname des Bilds | | `data` | string | ja | Base64-kodierte Bilddaten (max. 5 MB dekodiert) | | `altText` | string | | Alternativtext für das Bild | | `title` | string | | Titel des Bilds | *** #### `offer_add_section` Fügt dem Angebot einen neuen Textabschnitt aus Markdown hinzu. Der Server konvertiert Markdown in das Editor-Format; du schreibst nie Tiptap-JSON. Unterstützt werden Überschriften, Absätze, Fett/Kursiv, Listen, Tabellen (GFM) und Links. | Parameter | Typ | Pflicht | Beschreibung | | ---------- | ------ | ------- | ----------------------------------------------------------- | | `offerId` | string | ja | UUID des Angebots | | `heading` | string | | Optionale Abschnittsüberschrift (wird als H2 vorangestellt) | | `markdown` | string | ja | Abschnittsinhalt als Markdown | Gibt die neue `sectionId` zurück (für spätere `offer_set_content`-Aufrufe). *** #### `offer_set_content` Setzt den Prosa-Inhalt eines bestehenden Abschnitts aus Markdown (ersetzt den Abschnitts-Body). Gleiche Markdown-Unterstützung wie `offer_add_section`. Für Positionen und Preise stattdessen `offer_set_pricing` nutzen. | Parameter | Typ | Pflicht | Beschreibung | | ----------- | ------ | ------- | ------------------------------------------------------------ | | `offerId` | string | ja | UUID des Angebots | | `sectionId` | string | ja | ID des Abschnitts (aus `offer_get` oder `offer_add_section`) | | `markdown` | string | ja | Neuer Abschnittsinhalt als Markdown | *** #### `offer_set_pricing` Setzt die Positionen und Preise eines Angebots aus fachlicher Sicht (ersetzt den kompletten Preisblock). Preise als `{ "amount": "1500.00", "currency": "EUR" }` angeben, nie als Cent-Integer. `price` weglassen bedeutet Listenpreis des Preisplans. Befristete Rabatte über `discount.months`: der Server baut daraus intern zwei Positionen mit Vertragsfenstern. Jede Schreibantwort enthält das gerechnete Preis-View-Model mit Positionen, Rabatt-Labels, Phasen, Summen und Vertragswert. | Parameter | Typ | Pflicht | Beschreibung | | --------------- | ------ | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `offerId` | string | ja | UUID des Angebots | | `contractStart` | string | ja | Vertragsbeginn als Kalenderdatum, z. B. `2026-09-01` | | `term` | object | | Laufzeit in Monaten: `{ months, cancellationMonths }` | | `currency` | string | | ISO-4217-Code, z. B. `EUR` | | `lines` | array | ja | Positionen. Je Position: `productId`, `pricePlanId` (Pflicht), `quantity`, `name`, `price` (`{ amount, currency }`), `discount` (`{ percent }` oder `{ amount }`, optional `months` für Befristung) | *** #### `offer_set_parties` Setzt den Parteien-Block eines Angebots (Verkäufer, Käufer, Rechnungsempfänger, Referenz, Gültig-bis, PO-Nummer). Der Block wird automatisch angelegt, falls noch nicht vorhanden. Nur übergebene Felder werden geändert (Merge, kein Zurücksetzen). Datumsangaben als ISO-8601 mit Zeitzonen-Offset. | Parameter | Typ | Pflicht | Beschreibung | | ------------ | ------ | ------- | --------------------------------------- | | `offerId` | string | ja | UUID des Angebots | | `seller` | object | | Verkäufer-Partei | | `buyer` | object | | Käufer-Partei | | `billTo` | object | | Rechnungsempfänger-Partei | | `reference` | string | | Dokument-Referenz/Betreff | | `issueDate` | string | | Ausstellungsdatum (ISO-8601 mit Offset) | | `validUntil` | string | | Gültig-bis (ISO-8601 mit Offset) | | `poNumber` | string | | Bestellnummer des Käufers | *** #### `offer_set_signature` Setzt den Signatur-Block eines Angebots (Modus, Partei-Beschriftungen, Annahmetext). Block wird automatisch angelegt. Nur übergebene Felder werden geändert. Den Annahme-Modus des Angebots (`click`, `esignature`, `print`) setzt du über `offer_update`. | Parameter | Typ | Pflicht | Beschreibung | | ---------------- | ------- | ------- | --------------------------------------------- | | `offerId` | string | ja | UUID des Angebots | | `mode` | string | | Signatur-Modus des Blocks | | `sellerLabel` | string | | Beschriftung der Verkäufer-Unterschrift | | `buyerLabel` | string | | Beschriftung der Käufer-Unterschrift | | `requireTitle` | boolean | | Titel/Position bei der Unterschrift verlangen | | `acceptanceText` | string | | Annahmetext über der Unterschrift | *** #### `offer_set_letterhead` Setzt den Briefkopf-Block eines Angebots (Logo und Breite). Block wird automatisch angelegt. Nur übergebene Felder werden geändert. Logo-ID erhältst du aus `offer_upload_image`. | Parameter | Typ | Pflicht | Beschreibung | | ------------- | ------- | ------- | ---------------------------------------------- | | `offerId` | string | ja | UUID des Angebots | | `logoMediaId` | string | | Medien-ID des Logos (aus `offer_upload_image`) | | `logoWidth` | integer | | Logo-Breite in Pixel | | `logoUrl` | string | | Logo-URL (Alternative zu `logoMediaId`) | *** #### `offer_preview` Gibt die gerechnete Angebots-Vorschau zurück (Proposal-View-Model). Rechnet denselben Calculator durch wie die Käuferansicht und der PDF-Druck: Positionen mit Stückpreis, Menge, Rabatt-Label und Betrag; Phasen mit Datumsbereich; Summen; Vertragswert. So lässt sich vor dem Versand prüfen, ob Preise und Rabatte korrekt greifen. | Parameter | Typ | Pflicht | Beschreibung | | --------- | ------ | ------- | ------------------------------------------------------------ | | `offerId` | string | ja | UUID des Angebots | | `locale` | string | | Locale für Zahlen-/Datums-Labels, z. B. `de-DE` oder `en-US` | Berechtigung: `offer:read`. *** #### `offer_preview_link` Gibt einen internen Vorschau-Link für ein Angebot zurück, ohne einen Empfänger anzulegen und ohne eine E-Mail zu verschicken. Rein lesend, keine Nebenwirkung. Nutze diesen Link zum Prüfen vor der Zustellung. | Parameter | Typ | Pflicht | Beschreibung | | --------- | ------ | ------- | ----------------- | | `offerId` | string | ja | UUID des Angebots | *** #### `offer_publish` Veröffentlicht ein Angebot. Erst nach der Veröffentlichung erhält ein Empfänger einen gültigen Link und kann die Einladungs-E-Mail erhalten. Standardmäßig werden vorhandene Empfänger nicht benachrichtigt (`notifyRecipients: false`). Mit `notifyRecipients: true` wird eine E-Mail an bereits angelegte Empfänger verschickt (dann ausgehend). Greift ein Freigabe-Workflow, geht das Angebot nicht sofort live, sondern in den Status „Freigabe ausstehend" (`outcome: "pending_approval"` + `requestId`). Veröffentlichen ist kundenwirksam und braucht eine menschliche Freigabe: Der erste Aufruf gibt `status: "confirmation_required"` mit einer Vorschau zurück und veröffentlicht nichts. Das Bestätigungs-Token steckt nicht in der Antwort, sondern nur in einer Freigabe-Karte, die ein Mensch bestätigt. Unterstützt der Client keine Freigabe-Karten, wird eine Freigabe-Aufgabe im Posteingang angelegt (`status: "pending_approval"`). Greifen zusätzlich die Freigabe-Regeln des Angebots, geht es auch nach der Bestätigung nicht sofort live, sondern in den bestehenden Freigabeprozess (`outcome: "pending_approval"` mit `requestId`), den die berechtigte Person abschließt. | Parameter | Typ | Pflicht | Beschreibung | | ------------------ | ------- | ------- | ---------------------------------------------------------------------------------------- | | `offerId` | string | ja | UUID des Angebots | | `notifyRecipients` | boolean | | Vorhandene Empfänger per E-Mail benachrichtigen (Standard `false`, bei `true` ausgehend) | | `customMessage` | string | | Persönliche Nachricht für die Benachrichtigung (nur mit `notifyRecipients: true`) | | `confirmToken` | string | | Bestätigungs-Token aus der Freigabe-Karte | *** #### `offer_list_recipients` Listet die Empfänger eines Angebots auf (an wen es bereits zugestellt wurde). Rein lesend, verschickt nichts. | Parameter | Typ | Pflicht | Beschreibung | | --------- | ------ | ------- | ----------------- | | `offerId` | string | ja | UUID des Angebots | Gibt pro Empfänger zurück: `id`, `email`, `firstName`, `lastName`, `role` (`read`/`sign`/`countersigner`), `signingStatus` und den persönlichen Link. Berechtigung: `offer:read`. *** #### `offer_add_recipient` Dieses Tool ist ausgehend: Bei einem bereits veröffentlichten Angebot verschickt es eine echte E-Mail an eine echte Person. Frage vor dem Aufruf ausdrücklich nach, ob an genau diese Adresse zugestellt werden soll. Legt einen Empfänger an und stellt ihm das Angebot zu. Ist das Angebot noch nicht veröffentlicht, wird der Empfänger angelegt, aber keine E-Mail verschickt (`emailSent: false`); rufe dann zuerst `offer_publish` auf. Bei einem veröffentlichten Angebot ist der Versand die einzige ausgehende, nicht umkehrbare Aktion und verlangt eine menschliche Freigabe. Der erste Aufruf gibt `status: "confirmation_required"` mit einer Vorschau zurück und versendet nichts. Das Bestätigungs-Token liegt bewusst nicht in der Modell-Antwort, sondern nur in einer Freigabe-Karte, die ein Mensch bestätigt. Unterstützt der Client keine Freigabe-Karten, wird stattdessen eine Freigabe-Aufgabe im Posteingang angelegt (`status: "pending_approval"` mit `actionItemId`); eine zweite Person gibt sie dort frei, woraufhin die Einladung tatsächlich versendet wird. Ein KI-Modell allein kann diesen Versand also nicht auslösen. | Parameter | Typ | Pflicht | Beschreibung | | -------------- | ------ | ------- | ---------------------------------------------------------------------------------- | | `offerId` | string | ja | UUID des Angebots | | `email` | string | ja | E-Mail-Adresse des Empfängers | | `firstName` | string | | Vorname | | `lastName` | string | | Nachname | | `role` | string | | `read` (nur ansehen, Standard) oder `sign` (unterschreiben) | | `confirmToken` | string | | Bestätigungs-Token aus der Freigabe-Karte (nur bei veröffentlichtem Angebot nötig) | Gibt zurück: Empfänger-Daten, `emailSent` (ob eine Mail rausging), `hint` und `nextSteps`. Berechtigung: `offer:write`. *** #### `offer_remove_recipient` Entfernt einen Empfänger von einem Angebot (verändernd, aber nicht ausgehend). Der Empfänger kann das Angebot danach nicht mehr über seinen Link aufrufen. Empfänger, die bereits unterschreiben oder unterschrieben haben, können nicht entfernt werden. | Parameter | Typ | Pflicht | Beschreibung | | ------------- | ------ | ------- | ------------------------------------------------- | | `offerId` | string | ja | UUID des Angebots | | `recipientId` | string | ja | ULID des Empfängers (aus `offer_list_recipients`) | *** #### `offer_download_pdf` Rendert den aktuellen Stand eines Angebots als PDF und gibt einen zeitlich begrenzten Download-Link zurück. Keine Binärdaten in der Antwort, nur der Link. Das Angebot wird nicht verändert. | Parameter | Typ | Pflicht | Beschreibung | | -------------- | ------- | ------- | ------------------------------------------------------------------ | | `offerId` | string | ja | UUID des Angebots | | `secondsValid` | integer | | Gültigkeitsdauer des Links in Sekunden (60 bis 3600, Standard 300) | Gibt `url`, `filename` und `expiresAt` (ISO-8601) zurück. Berechtigung: `offer:read`. *** #### `offer_activities` Liest das Aktivitätsprotokoll eines Angebots (geöffnet, angesehen, angenommen usw.). Rein lesend. | Parameter | Typ | Pflicht | Beschreibung | | --------- | ------ | ------- | ----------------- | | `offerId` | string | ja | UUID des Angebots | Gibt eine chronologische Liste zurück (älteste zuerst): `id`, `type`, `occurredAt` (ISO-8601), `actor`, `metadata` und `links`. Das Protokoll ist nie leer (enthält mindestens „Angebot erstellt"). Berechtigung: `offer:read`. *** `offer_add_block` und `offer_update_block` bleiben als erweiterter Zugriff erhalten, wenn du genaue Kontrolle über den Tiptap-Node-Baum benötigst. Bevorzuge aber immer die Intent-Tools: sie schützen vor ungültigen Dokumentstrukturen und 0,00-Euro-Positionen. *** ## Angebote mit KI erstellen: ein typischer Ablauf So erstellst du mit einem KI-Assistenten ein vollständiges Angebot und stellst es zu: Suche den Kunden mit `customer_search`, um die UUID zu bestätigen. Suche dann das gewünschte Produkt mit `product_search` und lade die Preispläne mit `product_prices`. IDs nie raten. Die zurückgegebenen `productId` und `pricePlanId` benötigst du im Schritt „Positionen setzen". Lege ein leeres Angebot für den Kunden an: ```json theme={null} { "tool": "offer_create", "arguments": { "customerId": "", "name": "Software-Paket 2026", "locale": "de", "validUntil": "2026-12-31" } } ``` Die Antwort enthält die `offerId` für alle weiteren Aufrufe. Füge Abschnitte als Markdown hinzu. Der Server konvertiert Markdown in das Editor-Format: ```json theme={null} { "tool": "offer_add_section", "arguments": { "offerId": "", "heading": "Leistungsumfang", "markdown": "Wir liefern ...\n\n- Punkt 1\n- Punkt 2" } } ``` Die Antwort enthält die `sectionId` für spätere Änderungen per `offer_set_content`. Setze die Positionen über `offer_set_pricing`. Preise immer als Dezimalstring, nie als Cent-Integer. `price` weglassen bedeutet Listenpreis: ```json theme={null} { "tool": "offer_set_pricing", "arguments": { "offerId": "", "contractStart": "2026-09-01", "term": { "months": 24, "cancellationMonths": 3 }, "currency": "EUR", "lines": [ { "productId": "", "pricePlanId": "", "name": "Fynn Pro – Lizenz" }, { "productId": "", "pricePlanId": "", "name": "Implementierung & Onboarding", "price": { "amount": "1500.00", "currency": "EUR" } } ] } } ``` Die Antwort enthält direkt das gerechnete View-Model. Prüfe dort, ob alle Positionen erwartete Beträge zeigen und keine 0,00-Euro-Zeilen vorkommen. Rufe `offer_preview_link` auf, um einen internen Vorschau-Link zu erhalten, ohne eine E-Mail zu verschicken. Alternativ liefert `offer_preview` das gerechnete View-Model direkt. Besprich das Ergebnis mit der Person und frage, ob das Angebot so versendet werden soll. Veröffentliche das Angebot. Erst danach erhält ein Empfänger einen gültigen Link: ```json theme={null} { "tool": "offer_publish", "arguments": { "offerId": "" } } ``` Greift ein Freigabe-Workflow, gibt die Antwort `outcome: "pending_approval"` zurück. Ein Mensch muss die Freigabe in der App-Inbox bestätigen, bevor das Angebot live geht. Frage zuerst ausdrücklich, an welche Person zugestellt werden soll. Erst nach Bestätigung den Empfänger anlegen: ```json theme={null} { "tool": "offer_add_recipient", "arguments": { "offerId": "", "email": "erika.musterfrau@beispiel.de", "firstName": "Erika", "lastName": "Musterfrau", "role": "sign" } } ``` Die Antwort enthält `emailSent: true`, wenn die Einladungs-E-Mail rausgegangen ist, sowie den persönlichen Link des Empfängers. Alle Angebots-Tools respektieren den Lebenszyklus: ein angenommenes oder archiviertes Angebot kann nicht mehr verändert werden. Prüfe den Status vorab mit `offer_get`. *** ## Ressourcen Neben Tools stellt der MCP-Server Ressourcen bereit. Ressourcen sind lesbare Datenobjekte mit einer festen URI: Ein KI-Client kann sie in seinen Kontext laden, ohne dafür einen Tool-Aufruf zu verbrauchen. Alle Ressourcen sind organisations-beschränkt. | URI | Inhalt | | ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------- | | `fynn://glossary` | Deutsche Fachbegriffe (Debitor, Mandant, PRAP, EXTF, GoBD, ZUGFeRD usw.) | | `fynn://schema/price-plan` | Preisplan-Schemas pro Preistyp, wie `product_prices` sie zurückgibt | | `fynn://schema/offer-block/{type}` | Schema und Beispiel-Node eines bestimmten Block-Typs | | `fynn://schema/subscription-proposal-line` | Schema einer Angebotsposition (subscriptionProposal-Zeile) | | `fynn://guide/offer-authoring` | Schritt-für-Schritt-Anleitung zum Aufbau eines Angebots | | `fynn://guide/pricing-and-discounts` | Preiseinheiten, Preistypen, Rabattformen und häufige Fehler | | `fynn://guide/invoicing` | Belege anlegen, Positionen ergänzen, finalisieren; GoBD-Grenzen | | `fynn://guide/datev-export` | DATEV-Cloud-Export-Ablauf: Voraussetzungen, Bestätigung, Status | | `fynn://catalog/products` | Aktive Produkte der Organisation (Katalogfelder), ohne Tool-Aufruf abrufbar | | `fynn://catalog/price-plans/{productId}` | Preispläne eines Produkts. Geld immer als Objekt `{amount, currency}` mit Dezimalstring in Euro | | `fynn://tenant/settings` | Konfiguration der Organisation: Firmenidentität, Adresse, Sprache, Zeitzone, Steuerberechnungsmodus | | `fynn://offer/{offerId}` | Einstellungen und Abschnitts-Gliederung eines Angebots (lesend). Für die gerechneten Zahlen `fynn://offer/{offerId}/view-model` | | `fynn://examples/offer/reference` | Kopierbares Referenzbeispiel für die Angebots-Preisgestaltung über `offer_set_pricing` | Die dynamischen Ressourcen liefern dieselben Zahlen wie die passenden Tools, kosten aber keinen Tool-Aufruf. Geldbeträge folgen in `fynn://catalog/price-plans/{productId}` der einheitlichen Form `{"amount": "149.00", "currency": "EUR"}` (Dezimalstring in der Hauptwährungseinheit), damit ein aus der Ressource übernommener Preis ohne Umrechnung in `offer_set_pricing` passt. ### Autovervollständigung Für die Platzhalter parametrisierter Ressourcen bietet der Server Vorschläge über `completion/complete` an. Ein Client kann so einen Wert vervollständigen, statt ihn zu raten: | Platzhalter | Ressource | Vorschläge | | ------------- | ------------------------------------------------------------- | ---------------------------------------------------------- | | `{type}` | `fynn://schema/offer-block/{type}` | Bekannte Blocktypen aus der Registry | | `{productId}` | `fynn://catalog/price-plans/{productId}` | Eigene Produkte (Treffer auf Name, interner Name, Nummer) | | `{offerId}` | `fynn://offer/{offerId}`, `fynn://offer/{offerId}/view-model` | Eigene Angebote (Treffer auf Nummer, Name), neueste zuerst | Die Vorschläge sind organisations-beschränkt und respektieren die Leserechte: Ohne die passende Berechtigung liefert die Vervollständigung eine leere Liste. *** ## Prompts Der MCP-Server stellt zwei geführte Prompts bereit. Ein Prompt ist eine vorbereitete Anweisung, die ein KI-Client in seine Unterhaltung einbetten kann. ### `angebot_erstellen` Geführter Ablauf zum Erstellen eines Angebots: Kunde auflösen, Katalog prüfen, Positionen schemasicher aufbauen, Konditionen setzen, Vorschau prüfen und Rückfrage vor dem Versand. Optionale Argumente: `kunde`, `produkte`, `laufzeit`, `rabatt`. ### `angebot_pruefen` Prüft ein Angebot vor dem Versand anhand einer Checkliste: Summen plausibel, keine 0,00-Euro-Positionen, `validUntil` gesetzt, Empfänger vorhanden, Freigabe nötig? Pflichtargument: `offerId`. *** ## Fortschritt und Rückfragen ### Fortschrittsmeldungen Länger laufende Tools (DATEV-Cloud-Export, PDF- und ZIP-Download) senden Fortschrittsmeldungen mit einem beschreibenden Text. Das geschieht nur, wenn der Client den Aufruf mit einem `progressToken` im `_meta`-Feld anfordert. Ohne `progressToken` bleibt die Antwort ein einfaches JSON-Objekt, es ändert sich nichts am Verhalten. Ein Client, der den Fortschritt sehen möchte, sendet im `tools/call` also zum Beispiel `"_meta": { "progressToken": "abc" }` und erhält die Antwort als Ereignis-Stream mit den Fortschrittsmeldungen vor dem Endergebnis. ### Bestätigung und Freigabe Aktionen mit echter Außenwirkung sind durch eine serverseitige Rückfrage abgesichert. Statt einer interaktiven Nachfrage über das Protokoll (die über die zustandslose HTTP-Anbindung nicht sicher zurücklaufen kann) gibt es drei Stufen, je nach Fallhöhe der Aktion: * **Einfache Bestätigung** (sichtbares Token): Der erste Aufruf gibt `status: "confirmation_required"` mit einem `confirmToken` und einer Vorschau zurück und führt nichts aus. Derselbe Aufruf mit unveränderten Argumenten und dem `confirmToken` löst die Aktion aus. Das schützt vor einer versehentlichen Ausführung bei geringer Fallhöhe. * **Menschliche Freigabe** (zum Beispiel `offer_publish` und `offer_add_recipient` bei einem veröffentlichten Angebot): Der erste Aufruf gibt ebenfalls `status: "confirmation_required"` zurück, aber das Token liegt bewusst nicht in der Antwort, sondern nur in einer Freigabe-Karte, die im Client als eigenständige, abgeschottete Ansicht erscheint. Nur ein Mensch kann dort bestätigen; ein KI-Modell kann das Token nicht selbst erzeugen. Unterstützt der Client keine Freigabe-Karten, wird automatisch eine Freigabe-Aufgabe im Posteingang angelegt (`status: "pending_approval"`). Greifen beim Veröffentlichen zusätzlich die Freigabe-Regeln des Angebots, übernimmt der bestehende Freigabeprozess und die berechtigte Person gibt frei. * **Vier-Augen-Freigabe im Posteingang** (zum Beispiel `invoice_finalize`, `update_subscription_prices`): Es entsteht immer eine Freigabe-Aufgabe (`status: "pending_approval"` mit `actionItemId`), die eine zweite Person im Posteingang der App freigibt oder ablehnt. Mit `pending_action_status` fragst du den Stand ab. In allen Fällen wird ein Bestätigungs-Token abgelehnt und eine frische Vorschau ausgestellt, wenn sich der zugrunde liegende Zustand zwischen Rückfrage und Bestätigung geändert hat. So bleibt die Kontrolle beim Menschen, ohne dass der KI-Client eine Aktion mit Außenwirkung ungefragt auslöst. `datev_cloud_export_start` nutzt weiterhin eine einfache `confirm: true`-Bestätigung. ### Listen und Änderungen Die Listen-Methoden (`tools/list`, `resources/list`, `resources/templates/list`, `prompts/list`) sind paginiert: Der Server liefert bis zu 50 Einträge pro Seite und, falls mehr existieren, einen `nextCursor`. Ein Client sollte dem `nextCursor` folgen, bis keiner mehr zurückkommt. Der aktuelle Umfang liegt unter dieser Grenze, sodass in der Regel eine Seite genügt. Der Server meldet keine nachträglichen Listen-Änderungen (`listChanged`). Der Satz an Tools, Ressourcen und Prompts steht beim Verbindungsaufbau fest und bleibt für die Dauer der Sitzung unverändert, daher gibt es nichts nachzumelden. # MCP-Server Source: https://docs.fynn.eu/guide/developers/mcp-server Verbinde KI-Tools direkt mit deinen Fynn-Daten. Der Fynn MCP-Server stellt Kunden, Abonnements, Rechnungen, Angebote und den DATEV-Export als Werkzeuge bereit, die dein KI-Client aufruft. Der **Fynn MCP-Server** verbindet KI-Tools mit deinen Fynn-Daten. MCP (Model Context Protocol) ist ein offener Standard, über den KI-Clients wie Claude Code, Claude Desktop oder andere MCP-fähige Anwendungen Werkzeuge aufrufen. Statt Antworten zu erfinden, fragt der KI-Client die echten Daten direkt bei Fynn ab: Kunden anlegen, Abonnements einsehen, Angebote erstellen und versenden, Rechnungen bearbeiten oder einen DATEV-Export anstoßen. Endpunkt: `https://coreapi.io/portal/mcp` (Sandbox: `https://preview.coreapi.io/portal/mcp`). Die Verbindung läuft über den Streamable-HTTP-Transport der MCP-Spezifikation. ## Verfügbare Werkzeuge | Bereich | Werkzeuge | | -------------- | --------------------------------------------------------------------------- | | Kunden | Suchen, anlegen, Stammdaten aktualisieren, Saldo und Zahlungen abrufen | | Abonnements | Abos und ihre Positionen einsehen, Preise anpassen (mit Freigabe) | | Rechnungen | Suchen, anlegen, bearbeiten, finalisieren (mit Freigabe), PDF herunterladen | | Angebote | Anlegen, Texte und Preise setzen, veröffentlichen, Empfänger einladen | | DATEV | Export starten und Status abfragen | | Produktkatalog | Produkte und Preispläne suchen | | Allgemein | Verbindung testen (Ping) | Schreibende Werkzeuge sind deutlich als verändernd gekennzeichnet. Werkzeuge, die E-Mails an echte Personen verschicken, sind zusätzlich als ausgehend markiert und fragen vor dem Versand nach einer Bestätigung. Kritische Aktionen (Rechnungsfinalisierung, Preisänderungen) laufen zweistufig: der KI-Assistent bereitet vor, ein Mensch gibt in der App-Inbox frei. ## Zugriffs-Token in der App anlegen Der MCP-Server authentifiziert sich mit einem persönlichen API-Token. Jeder Nutzer legt seine Token selbst an. Öffne in der App **Konto** und dort **API-Tokens**. Lege einen neuen Token an. Vergib einen sprechenden Namen, damit du später erkennst, wofür der Token gedacht ist, etwa nach Werkzeug oder Gerät. Setze ein Ablaufdatum. So läuft der Token automatisch aus, falls du ihn vergisst. Der Token wird genau einmal angezeigt. Kopiere ihn sofort und speichere ihn sicher. Danach lässt er sich nicht mehr einsehen. Lege pro Werkzeug oder Gerät einen eigenen Token an. So kannst du einen einzelnen Zugang widerrufen, ohne die anderen zu unterbrechen. Alternativ funktioniert auch ein organisationsweiter API-Schlüssel aus **Einstellungen > Entwickler > API-Schlüssel**. Ein solcher Schlüssel ist an die Organisation gebunden, nicht an einen einzelnen Nutzer. ## Claude Code anbinden In Claude Code fügst du den Server mit einem Befehl hinzu. Ersetze `api_DEIN_TOKEN` durch deinen Token. ```bash theme={null} claude mcp add --transport http fynn https://coreapi.io/portal/mcp \ --header "Authorization: Bearer api_DEIN_TOKEN" ``` Danach stehen die Fynn-Werkzeuge in Claude Code zur Verfügung. Mit dem Ping-Werkzeug prüfst du, ob die Verbindung steht. ## Andere MCP-Clients anbinden Viele MCP-Clients lesen ihre Serverliste aus einer `.mcp.json`. Trage den Fynn-Server als HTTP-Server ein und schicke deinen Token im `Authorization`-Header mit. ```json theme={null} { "mcpServers": { "fynn": { "type": "http", "url": "https://coreapi.io/portal/mcp", "headers": { "Authorization": "Bearer api_DEIN_TOKEN" } } } } ``` ## Sicherheit und Berechtigungen Ein Token gibt Zugriff auf deine Fynn-Daten. Behandle ihn wie ein Passwort. Trage ihn nicht in geteilte Repositories ein und gib ihn nicht weiter. * **Der Token trägt deine Rechte.** Er ist an deinen Benutzer gebunden und hat exakt die Berechtigungen, die du in der jeweiligen Organisation hast. Was du in der App nicht sehen oder bearbeiten darfst, liefert oder verändert auch der MCP-Server nicht. * **Alle Ergebnisse sind organisationsgetrennt.** Ein Token gibt niemals Daten anderer Organisationen zurück. * **Abgelaufene Token werden abgelehnt.** Nach dem Ablaufdatum funktioniert ein Token nicht mehr. * **Schreibende Werkzeuge sind gekennzeichnet.** Jedes Tool, das Daten verändert, ist in der Beschreibung mit „ACHTUNG: verändernd" markiert. Ausgehende Aktionen (z. B. E-Mail an Empfänger) erfordern eine ausdrückliche Bestätigung, bevor sie ausgeführt werden. ### Zielorganisation wählen Gehörst du zu mehreren Organisationen, kannst du die Zielorganisation über den zusätzlichen Header `X-Fynn-Tenant-Id` festlegen. ```bash theme={null} claude mcp add --transport http fynn https://coreapi.io/portal/mcp \ --header "Authorization: Bearer api_DEIN_TOKEN" \ --header "X-Fynn-Tenant-Id: DEINE_ORGANISATIONS_ID" ``` Ohne diesen Header gilt deine Standard-Organisation. Bei einem organisationsweiten API-Schlüssel gilt immer dessen Organisation, der Header hat dann keine Wirkung. ## Token widerrufen Vermutest du, dass ein Token in falsche Hände geraten ist, lösche ihn in der App unter **Konto > API-Tokens**. Ab dem nächsten Aufruf wird der Zugriff sofort abgelehnt. Erstelle bei Bedarf einen neuen Token und trage ihn in deinem MCP-Client ein. # Vertriebskanäle über die API Source: https://docs.fynn.eu/guide/developers/sales-channels Wie Fynn den aktiven Vertriebskanal pro Request auflöst, wie du Kunden einem Kanal zuordnest, und die Endpunkte zum Verwalten von Kanälen, eigenen Domains und Branding. Ein **Vertriebskanal** (Sales Channel) bildet eine Marke deiner Organisation ab und bestimmt Branding, Domain, erlaubte Zahlungsmethoden, Coupon-Verhalten und Kundenbereich. Diese Seite erklärt das Verhalten aus Entwicklersicht. Die fachliche Einführung findest du unter [Vertriebskanäle](/guide/tenant/sales-channels). Jede Organisation hat **immer** einen Kanal mit dem technischen Namen `default`. Er ist der universelle Fallback und kann nicht gelöscht werden. Vertriebskanäle sind organisatorisch, sie isolieren **keine** Daten. Kunden, Subscriptions, Rechnungen, Produkte und Preise bleiben organisationsweit. In den Beispielen ist `$BASE_URL` die Basis-URL deiner Fynn-API und `$API_TOKEN` ein API-Token, das als `Authorization: Bearer` mitgeschickt wird. ## Kanal-Auflösung Fynn löst den aktiven Vertriebskanal **pro eingehendem Request** auf, nachdem der Tenant feststeht. Es gewinnt der erste Treffer in dieser Kette: Expliziter Kanal per Header `X-Sales-Channel-Id: `. Wird für interne Wallet- und Tool-Zugriffe genutzt, wenn der Aufrufer den Kanal kennt. `X-Cart-Token: ` löst den Warenkorb auf; dessen Kanal stammt aus dem CheckoutLink. Das ist der reguläre Weg im Checkout der Kundenfront. Der Host der Anfrage wird über die Customerfront-Domain zum Kanal aufgelöst. Bei Cross-Origin-Aufrufen der Kundenfront-SPA (der `Host` ist dann die API-Domain) wird zusätzlich `Origin`, dann `Referer`, dann `X-Source-Domain` herangezogen, dieselbe Header-Reihenfolge, mit der auch der Tenant aufgelöst wird. Greift keiner der Schritte, wird der `default`-Kanal der Organisation verwendet. **Cross-Tenant-Guard:** Jeder aufgelöste Kanal wird gegen den Tenant des Requests geprüft. Gehört ein per Header oder Cart-Token referenzierter Kanal zu einer anderen Organisation, wird er still verworfen, und die Kette läuft zum nächsten Schritt weiter. Auf einen fremden Kanal fällt sie nie zurück. Praktische Konsequenz: Verbindest du eine eigene Domain mit einem Kanal (siehe [Eigene Domains](#eigene-domains)), erreichen Aufrufe über diese Domain automatisch den richtigen Kanal, ohne dass du einen Header setzen musst. Eine Domain ist immer **genau einem** Kanal zugeordnet. ## Der `salesChannel` am Kunden Jeder Kunde gehört genau einem Vertriebskanal an. Die Zuordnung steuert, welches Branding der Kunde in Bestätigungen, Dokumenten und im Self-Service sieht. ### Beim Anlegen und Aktualisieren (Eingabe) Die Felder `POST /customers` und `PATCH /customers/{id}` akzeptieren ein optionales Feld `salesChannel`: * Wert ist die **UUID** oder der **technische Name** des Kanals (zum Beispiel `"default"`). * Der Kanal muss existieren und zur aktuellen Organisation gehören, andernfalls antwortet die API mit `422` und einer Validierungsmeldung am Feld. * Lässt du das Feld bei der **Anlage** leer, weist Fynn den aktuell aufgelösten bzw. den `default`-Kanal zu. ```bash Kunde einem Kanal zuordnen theme={null} curl -X POST "$BASE_URL/customers" \ -H "Authorization: Bearer $API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "type": "company", "companyName": "Acme GmbH", "salesChannel": "b2b-shop" }' ``` ```bash Kanal eines Kunden ändern theme={null} curl -X PATCH "$BASE_URL/customers/{id}" \ -H "Authorization: Bearer $API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "salesChannel": "default" }' ``` ### In der Ausgabe (Lesen) In Kunden-Antworten (sowie eingebettet in CheckoutLink, Cart und Webhook-Envelopes) erscheint der Kanal als kompakte Referenz: ```json theme={null} { "id": "0f9b…", "companyName": "Acme GmbH", "salesChannel": { "id": "45d60990-cde6-4139-b64f-79b79c6c6d98", "name": "b2b-shop", "brandName": "Acme B2B" } } ``` | Feld | Bedeutung | | ----------- | ----------------------------------------------------------------------------------------------- | | `id` | UUID des Kanals. | | `name` | Stabiler technischer Name (zum Beispiel `default`). Eindeutig pro Organisation, nicht änderbar. | | `brandName` | Anzeigename der Marke für E-Mails, PDFs und Checkout. | ## Vertriebskanäle verwalten Die folgenden Endpunkte verwalten Kanäle und ihre Einstellungen. Sie erfordern ein API-Token mit der Berechtigung `sales-channel:read` (lesend) bzw. `sales-channel:write` (schreibend). | Methode | Pfad | Zweck | Berechtigung | | --------------- | ----------------------------------------------- | ----------------------------------------------------------------- | ------------------------------ | | `GET` | `/api/sales-channels` | Alle Kanäle der Organisation auflisten | `sales-channel:read` | | `POST` | `/api/sales-channels` | Kanal anlegen | `sales-channel:write` | | `GET` | `/api/sales-channels/{id}` | Einen Kanal abrufen | `sales-channel:read` | | `PATCH` | `/api/sales-channels/{id}` | Stammdaten, Coupons, Zahlungsmethoden, Weiterleitungs-URLs ändern | `sales-channel:write` | | `DELETE` | `/api/sales-channels/{id}` | Kanal löschen (nur ohne Referenzen, nicht den `default`) | `sales-channel:write` | | `PATCH` | `/api/sales-channels/{id}/appearance` | Logo, Farben, Rechtstexte ändern | `sales-channel:write` | | `GET` · `PATCH` | `/api/sales-channels/{id}/customer-area` | Kundenbereich lesen/ändern | `sales-channel:read` · `write` | | `GET` · `PATCH` | `/api/sales-channels/{id}/email-settings` | Absender, Sendedomain, Mail-Vorlage | `sales-channel:read` · `write` | | `GET` · `PATCH` | `/api/sales-channels/{id}/document-settings` | Belegvorlagen (Logo-Position, Fußbereich) | `sales-channel:read` · `write` | | `GET` | `/api/sales-channels/{id}/domain` | Standard-Domain des Kanals | `sales-channel:read` | | `GET` | `/api/sales-channels/payment-methods/available` | Verfügbare Zahlungsmethoden (aktive Gateways) | `sales-channel:read` | ### Kanal anlegen ```bash theme={null} curl -X POST "$BASE_URL/api/sales-channels" \ -H "Authorization: Bearer $API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "name": "b2b-shop", "brandName": "Acme B2B", "websiteUrl": "https://b2b.acme.example" }' ``` | Feld | Pflicht | Regeln | | ------------ | ------- | ----------------------------------------------------------------------------------------------------------------------------- | | `name` | ja | Technischer Name. Nur Kleinbuchstaben, Ziffern und Bindestriche (`^[a-z0-9-]+$`), 1 bis 255 Zeichen. **Nicht** mehr änderbar. | | `brandName` | ja | Anzeigename der Marke, 1 bis 255 Zeichen. | | `websiteUrl` | nein | Muss `https` sein. | Beim Anlegen wird automatisch eine Standard-Customerfront-Domain aus `name` und einem festen Suffix erzeugt. Der `name` ist später unveränderlich, weil er in URLs und Logs auftaucht. ### Kanal aktualisieren `PATCH /api/sales-channels/{id}` ist partiell, nur übergebene Felder werden geändert. ```bash theme={null} curl -X PATCH "$BASE_URL/api/sales-channels/{id}" \ -H "Authorization: Bearer $API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "allowCoupons": false, "allowedPaymentMethods": ["sepa_direct_debit"], "paymentSuccessUrl": "https://b2b.acme.example/danke" }' ``` | Feld | Typ | Bedeutung | | ------------------------------------------------------------------------------------------ | -------------- | ------------------------------------------------------------------------------------------------------------------- | | `brandName` | string | Anzeigename der Marke. | | `websiteUrl` | string (https) | „Zurück zur Website"-Link. | | `phone` | string | Kontakt-Telefonnummer. | | `allowCoupons` | boolean | Kanal-Gate für Coupons (siehe unten). | | `allowedPaymentMethods` | string\[] | Whitelist der Zahlungsmethoden. Leer = keine Einschränkung. Jeder Wert muss auf ein aktives Gateway abbildbar sein. | | `paymentSuccessUrl` `paymentCancelUrl` `paymentFailureUrl` `paymentPendingUrl` `returnUrl` | string (https) | Weiterleitungs-URLs nach dem Zahlvorgang. | ### Vollständige Kanal-Repräsentation `GET /api/sales-channels/{id}` liefert die volle Sicht inklusive eingebetteter Appearance-Felder: ```json theme={null} { "id": "45d60990-cde6-4139-b64f-79b79c6c6d98", "name": "default", "isDefault": true, "brandName": "myLife AG", "websiteUrl": "https://mylife.de", "phone": "+49 30 1234567", "allowCoupons": true, "allowedPaymentMethods": [], "paymentSuccessUrl": null, "paymentCancelUrl": null, "paymentFailureUrl": null, "paymentPendingUrl": null, "returnUrl": null, "logoUrl": "https://…/logo.svg", "primaryColor": "#000000", "secondaryColor": "#FF0000", "privacyUrl": "https://mylife.de/datenschutz", "conditionsUrl": "https://mylife.de/agb", "createdAt": "2026-01-10T08:00:00+00:00", "updatedAt": "2026-06-17T12:00:00+00:00" } ``` ## Coupon-Gate `allowCoupons` ist ein **Kanal-weites Gate**. Steht es auf `false`, sind Coupons in keinem CheckoutLink dieses Kanals einlösbar, egal was der einzelne CheckoutLink erlaubt. Ein CheckoutLink kann Coupons nur weiter **einschränken**, nie gegen den Kanal **erlauben**. | Kanal `allowCoupons` | CheckoutLink | Einlösbar | | -------------------- | ------------ | -------------------- | | `true` | erlaubt | ja | | `true` | verboten | nein | | `false` | erlaubt | nein (Kanal gewinnt) | | `false` | verboten | nein | Neu angelegte Kanäle haben `allowCoupons = true`. ## Zahlungsmethoden-Whitelist `allowedPaymentMethods` wirkt als Whitelist: * **Leeres Array** → keine kanalspezifische Einschränkung; alle Methoden mit aktivem Gateway sind erlaubt. * **Befülltes Array** → nur die gelisteten Methoden, sofern ihr Gateway aktiv konfiguriert ist. Beim Speichern validiert Fynn, dass jeder Wert auf ein für die Organisation aktiv konfiguriertes Payment-Gateway abbildbar ist. Die im Kontext verfügbaren Methoden liefert `GET /api/sales-channels/payment-methods/available`. ## Eigene Domains Jeder Kanal hat genau eine **Standard-Domain** (automatisch, nicht editierbar) und optional **eine eigene Domain**. Ein einzelner CNAME genügt, das TLS-Zertifikat wird automatisch ausgestellt und erneuert. Es gibt **keinen** selbstverwalteten TXT-Nachweis. | Methode | Pfad | Zweck | | -------- | ----------------------------------------------- | ----------------------------------------- | | `GET` | `/api/sales-channels/{id}/custom-domain` | Domain + DNS-Anweisungen + Status abrufen | | `POST` | `/api/sales-channels/{id}/custom-domain` | Eigene Domain hinzufügen | | `POST` | `/api/sales-channels/{id}/custom-domain/verify` | Status sofort prüfen („Verifizieren") | | `DELETE` | `/api/sales-channels/{id}/custom-domain` | Eigene Domain entfernen | ### Domain hinzufügen ```bash theme={null} curl -X POST "$BASE_URL/api/sales-channels/{id}/custom-domain" \ -H "Authorization: Bearer $API_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "host": "shop.example.com" }' ``` Die Antwort enthält die DNS-Anweisungen und beide Status: ```json theme={null} { "id": "…", "host": "shop.example.com", "status": "pending", "sslStatus": "pending_validation", "isDefault": false, "dnsInstructions": [ { "type": "CNAME", "name": "shop.example.com", "value": "cname.customerfront.app" } ], "note": "Lege den CNAME-Eintrag bei deinem DNS-Anbieter an. Das TLS-Zertifikat wird automatisch ausgestellt, sobald der CNAME auflöst …" } ``` `dnsInstructions` enthält immer den CNAME und zusätzlich etwaige Validierungs-Einträge, die du ebenfalls anlegen musst. ### Die zwei Status Eine eigene Domain hat zwei voneinander unabhängige Status: | Feld | Bedeutung | Werte | | ----------- | ----------------------------- | -------------------------------------------------- | | `status` | DNS-Kontrolle / Verifizierung | `pending`, `verified` | | `sslStatus` | TLS-Lebenszyklus | `pending`, `pending_validation`, `active`, `error` | Die Domain wird erst **produktiv** (und zur Standard-Adresse des Kanals), wenn `sslStatus = active` ist. Ab da löst Fynn Anfragen über diese Domain auf den Kanal auf. ### Verifizieren `POST /api/sales-channels/{id}/custom-domain/verify` prüft den Status einmal synchron: * Ist der Status `active`, wird die Domain verifiziert und zur Standard-Customerfront-Domain des Kanals befördert. * `pending` / `pending_validation` werden ohne Fehler zurückgegeben, versuche es später erneut. * `error` (das Zertifikat kann nicht ausgestellt werden) führt zu einer Fehlerantwort. Du musst nicht aktiv pollen: Ein wiederkehrender Reconcile-Job prüft den SSL-Status im Hintergrund und schaltet die Domain frei, sobald das Zertifikat steht. Der Verify-Endpunkt ist nur der „jetzt prüfen"-Pfad und idempotent, eine bereits aktive Domain bleibt unverändert. ### Entfernen `DELETE /api/sales-channels/{id}/custom-domain` entfernt die eigene Domain und setzt die Kanal-Adresse auf die Standard-Domain zurück. Der Checkout bleibt also durchgehend erreichbar. ## Weiterleitungs-URLs und `returnUrl` Die optionalen URLs auf dem Kanal steuern, wohin der Kunde nach dem Zahlvorgang geleitet wird. Bleibt eine URL leer, fällt der Kunde auf die Standardseite der Kundenfront (`/self-service/transaction/{status}`) zurück. | Feld | Auslöser | | ------------------- | ----------------------------------------------------------------------------- | | `paymentSuccessUrl` | Status `booked` / `captured` (erfolgreich). | | `paymentCancelUrl` | Kunde bricht beim Anbieter ab. | | `paymentFailureUrl` | Explizite Ablehnung durch den Anbieter. | | `paymentPendingUrl` | Status `pending` / `authorized` (zum Beispiel wartende SEPA-Lastschrift). | | `returnUrl` | Nach einem API-getriebenen Payment-Method-Setup (`PaymentMethodSource::Api`). | Startest du Payment-Method-Setups über die API, wird nach Abschluss die Kanal-`returnUrl` aufgerufen. Lässt du sie leer, kannst du pro Request dynamisch ein `redirectUrl` im PaymentMethodSetup mitgeben, das stattdessen verwendet wird. ## Webhooks Jeder ausgehende Webhook trägt den Header `X-Sales-Channel` mit dem **technischen Namen** des Kanals, dem das auslösende Objekt zugeordnet ist (oder `default`, wenn keiner gesetzt ist). So routest du eingehende Events empfängerseitig nach Marke, ohne den Payload zu parsen. ```http theme={null} POST /your-webhook-endpoint HTTP/1.1 X-Sales-Channel: b2b-shop Content-Type: application/json ``` ## Verwandte Themen Die Einstellungen in der Wallet, Schritt für Schritt mit Screenshots. Kundenverwaltung und das `salesChannel`-Feld im Kontext. Sendedomain pro Kanal einrichten. Echtzeit-Events empfangen und nach Kanal routen. # Gutscheine & Rabatte Source: https://docs.fynn.eu/guide/discounts/introduction Erstelle und verwalte Gutscheine und Rabatte. Mit Gutscheinen und Rabatten kannst du deinen Kunden sowohl im [Checkout](/guide/checkout/introduction) als auch bei der [Abo-Anlage](/guide/subscriptions/introduction) Rabatte gewähren. Du kannst Gutscheine und Rabatte für alle Produkte oder nur für bestimmte Produkte erstellen. Du kannst auch festlegen, ob ein Gutschein nur einmal oder mehrmals verwendet werden kann. ## Rabatte Es gibt zwei Arten von Rabatten, die du erstellen kannst: 1. **Prozentualer Rabatt**: Ein prozentualer Rabatt wird auf den Gesamtbetrag angewendet. 2. **Fester Betrag**: Ein fester Betrag wird vom Einzelbetrag abgezogen. Bei Verwendung von **Fester Betrag** wird der Rabatt auf den Einzelpreis angewendet, nicht auf den Gesamtpreis. Beispiel: Ein Produkt kostet 10€ / Stück und der Rabatt beträgt 5€. Der Kunde zahlt nur noch 5€ / Stück. ### Rabatt erstellen Wähle **Rabatte** im Hauptmenü aus, um die Liste der Rabatte anzuzeigen. Klicke auf **Neu**. Fülle die Felder aus: * **Name**: Der Name des Rabatts. Dieser wird dem Kunden im [Checkout](/guide/checkout/introduction) angezeigt. * **Code**: Der Code, den der Kunde im [Checkout](/guide/checkout/introduction) eingeben muss, um den Rabatt zu erhalten. * **Typ**: Der Typ des Rabatts. Wähle zwischen einem prozentualen Rabatt und einem festen Betrag. * **Prozentualer Rabatt**: Der prozentuale Rabatt, der auf den Gesamtbetrag angewendet wird. * **Fester Betrag**: Der feste Betrag, der vom Gesamtbetrag abgezogen wird. * **Aktiv**: Ob der Rabatt aktiv ist oder nicht. Standardmäßig ist ein Rabatt dauerhaft gültig und kann beliebig oft im Warenkorb verwendet werden. Rabatt erstellen Du kannst die Gültigkeit des Rabatts festlegen: * **Dauerhaft**: Der Rabatt ist bis zur Beendigung des Abonnements gültig. * **Einmalig zu Beginn**: Der Rabatt wird einmalig bei der ersten Rechnung gewährt. * **Begrenzt auf x Abrechnungsperioden**: Der Rabatt wird für eine bestimmte Anzahl von Abrechnungsperioden gewährt. Folgende Optionen sind ebenfalls verfügbar: * **Anzahl Abrechnungsperioden**: Die Anzahl der Abrechnungsperioden, für die der Rabatt gültig ist (nur bei "Begrenzt auf x Abrechnungsperioden"). * **Maximale Einlösungen**: Die maximale Anzahl von Einlösungen des Rabatts - nur für den Warenkorb relevant. * **Maximale Einlösungen pro Kunde**: Die maximale Anzahl von Einlösungen des Rabatts pro Kunde - nur für den Warenkorb relevant. * **Gültig bis**: Das Datum, bis zu dem der Rabatt im Warenkorb gültig ist. Die Anzahl der Einlösungen und "Gültig bis" sind nur für den Warenkorb relevant. Wenn du den Rabatt für die Abo-Anlage verwenden möchtest, kann dieser beliebig oft verwendet werden. Rabatt Gültigkeit Abrechnungsperioden sind die Zeiträume, in denen ein Kunde für ein Abonnement in Rechnung gestellt wird. Die Abrechnungsperioden können täglich, wöchentlich, monatlich oder jährlich sein. Du kannst den Rabatt auf bestimmte Produkte beschränken. Hierfür kannst du unter "Gültig für Produkte" die Produkte auswählen, für die der Rabatt gültig sein soll. Unter "Ausgeschlossene Produkte" kannst du Produkte auswählen, für die der Rabatt nicht gültig sein soll. Beide Felder sind nicht gleichzeitig nutzbar. Rabatt Produkt Einschränkungen Klicke auf **Gutschein erstellen** um den Rabatt zu erstellen. Verwende hierfür den [Rabatt erstellen](/api-reference/coupon/create-a-coupon) Endpunkt. ```bash theme={null} POST /coupons ``` Alternativ kannst du die [Rabatte abrufen](/api-reference/coupon/get-all-coupons), um die Liste der Rabatte zu erhalten. ## Rabatt anpassen Du kannst einen Rabatt bearbeiten, indem du auf den Rabatt in der Liste klickst und die Werte anpasst. Klicke auf **Speichern**, um die Änderungen zu speichern. Hierbei sind alle Felder, die beim Erstellen eines Rabatts konfiguriert werden können, auch beim Bearbeiten verfügbar. Verwende hierfür den [Rabatt aktualisieren](/api-reference/coupon/update-a-coupon) Endpunkt. ```bash theme={null} PUT /coupons/{id} ``` ## Rabatt löschen Du kannst einen Rabatt löschen, indem du in der Liste auf die drei Punkte neben dem Rabatt klickst und **Löschen** auswählst. Bestätige die Aktion, um den Rabatt zu löschen. Ist der Rabatt bereits in einem Abonnement oder Warenkorb verwendet, kann dieser nicht gelöscht sondern nur deaktiviert werden. Verwende hierfür den [Rabatt löschen](/api-reference/coupon/delete-a-coupon) Endpunkt. ```bash theme={null} DELETE /coupons/{id} ``` Alternativ kannst du die [Rabatte abrufen](/api-reference/coupon/get-all-coupons). ## Gutschein-Codes Jeder Rabatt kann über den **Code** im [Checkout](/guide/checkout/introduction) eingelöst werden. Aktuell ist es nicht möglich mehrere Gutschein-Codes für den selben Rabatt zu erstellen. ## Rabatt im Abonnement verwenden Bestehende Rabatte können bei der Abonnement-Erstellung verwendet werden, alternativ kann für dieses Abonnement ein individueller Rabatt erstellt werden. Um einen Rabatt im Abonnement zu verwenden, lese bitte den [Guide zur Abonnement-Erstellung](/guide/subscriptions/introduction). ## Rabatte und MRR (Monthly Recurring Revenue) Bei der Berechnung des MRR (Monthly Recurring Revenue) werden **ausschließlich lebenslange Rabatte** berücksichtigt. Einmalige und für bestimmte Zyklen angegebene Rabatte werden nicht in die Berechnung einbezogen. # Mahnwesen Source: https://docs.fynn.eu/guide/dunning/introduction Automatisiertes Mahnwesen für Rechnungen Mit Hilfe des Mahnwesens können automatisiert Mahnungen und Zahlungserinnerungen für Rechnungen erstellt werden. Das Mahnwesen kann für alle Rechnungen oder nur für ausgewählte Rechnungen aktiviert werden. Du kannst pro Kunde eine eigene **Mahnwesen-E-Mail** hinterlegen, damit Zahlungserinnerungen und Mahnungen an einen dedizierten Ansprechpartner gesendet werden, z.B. an die Forderungsmanagement-Abteilung statt an die Buchhaltung. Siehe [E-Mail-Adressen verwalten](/guide/customers/email-management) für Details. ## Mahnwesen einrichten Das Mahnwesen kann mit einfachen Regeln eingerichtet werden. Grundsätzlich wird unabhängig von der Art jeweils ein PDF Dokument erstellt und per E-Mail an den Kunden versendet. Die E-Mail Vorlagen und das erstellte PDF Dokument können je Stufe individuell angepasst werden. ### Zahlungserinnerungen Öffne die Einstellungen und wähle den Reiter ["Mahnwesen"](https://app.fynn.eu/settings/payment-failures). Wähle eines der vorgegebenen Stufen und den Typ der Stufe aus. Mahnwesen Stufen Wähle aus ob die Original-Rechnung als Kopie an die E-Mail angehängt werden soll. Original-Rechnungskopie Passe die Anzahl der Tage an, die die Rechnung überfällig sein muss, damit die Mahnstufe ausgelöst wird. Ist bereits eine Mahnstufe ausgelöst, wird die Anzahl der Tage ab dem Erstellungsdatum des Mahndokuments der letzten Mahnstufe berechnet. Die Zahlungsfrist der Mahnstufe ist dabei nicht relevant. Tage überfällig Passe die Zahlungsfrist an. Diese wird für die Berechnung des Fälligkeitsdatums der Mahnstufe verwendet. Die Zahlungsfrist wird auf das Datum der Ausführung der Mahnstufe addiert. Zahlungsfrist Die E-Mail Vorlage kann nach Belieben angepasst werden. Generiere eine Vorschau indem du auf "Test E-Mail versenden" klickst. Die E-Mail kann zum jetzigen Zeitpunkt nur Text enthalten. **Folgende Platzhalter sind verfügbar** * `{{ referencedInvoiceNumber }}` - Rechnungsnummer * `{{ referencedInvoiceDate }}` - Rechnungsdatum * `{{ totalGrossAmount }}` - Rechnungsbetrag (brutto) (ggfs. inkl. Mahngebühren) * `{{ dueDate }}` - Fälligkeitsdatum der Zahlungserinnerung / Mahnung * `{{ tenant.name }}` - Name der Organisation aus den [allgemeinen Einstellungen](https://app.fynn.eu/settings) E-Mail Vorlage Passe die PDF Vorlage nach Belieben an. Generiere eine Vorschau indem du auf "Test PDF Dokument erstellen" klickst. PDF Vorlage Die Mahnstufe kann nun über den Schalter "Aktiv" aktiviert oder deaktiviert werden. Speichere nun die vorgenommenen Einstellungen, indem du auf "Änderungen speichern" klickst. Die Mahnstufe wurde erfolgreich eingerichtet und wird automatisiert für **bestehende und zukünftige** Rechnungen ausgelöst, die die definierten Kriterien erfüllen. Verwende hierfür den [Mahnstufe aktualisieren](/api-reference/overduerule/update-overdue-rule) Endpunkt. ```bash theme={null} PUT /dunning/overdue-rules/{id} ``` Alternativ kannst du die [Mahnstufen abrufen](/api-reference/overduerule/get-overdue-rules). ### Mahnungen Die Einrichtung der Mahnstufen erfolgt analog zu den Zahlungserinnerungen. Zusätzlich können Mahngebühren erhoben und ein Brief-Versand konfiguriert werden. #### Mahngebühren Mahngebühren können pro Mahnstufe konfiguriert werden. Die Mahngebühren werden auf den Rechnungsbetrag (brutto) aufgeschlagen. Zum jetzigen Zeitpunkt werden die Mahngebühren in der Buchhaltungsexporten nicht berücksichtigt. #### Brief-Versand Der Brief-Versand kann pro Mahnstufe konfiguriert werden. Hierbei wird das Mahn-PDF Dokument über unseren Partner für den Brief-Versand in Farbe einseitig gedruckt und versendet. Die Preise für den Brief-Versand sind der Preisliste zu entnehmen. ## Mahnwesen aussetzen Das Aussetzen des Mahnwesen kann auf 3 Ebenen eingerichtet werden: 1. Global 2. Für einzelne Kunden 3. Für einzelne Rechnungen Wird das Mahnwesen wieder reaktiviert, werden alle Rechnungen, die sich in der Zwischenzeit überfällig geworden sind, berücksichtigt. Hierbei greift die nächste Mahnstufe, die auf Basis des aktuellen Rechnungsstatus berechnet wird. Für einzelne Rechnungen kannst du einen Mahnstopp mit Enddatum setzen ("Mahnstopp bis"). Bis zu diesem Tag ruht das Mahnwesen, danach wird es automatisch fortgesetzt. Ohne Datum bleibt der Mahnstopp so lange bestehen, bis du ihn wieder aufhebst. Im Rechnungs-Export siehst du für jede Rechnung, ob ein Mahnstopp aktiv ist und bis wann er gilt. So erkennst du in deiner Auswertung überfälliger Rechnungen sofort, welche pausiert sind. ### Global Um das Mahnwesen global auszusetzen, kann dies in den Einstellungen (Einstellungen > Reiter "Mahnwesen") an den jeweiligen Mahnstufen konfiguriert werden. Soll das Mahnwesen vollständig ausgesetzt werden, müssen alle Mahnstufen deaktiviert werden. ### Für einzelne Kunden In den Kundenstammdaten kann das Mahnwesen für den jeweiligen Kunden ausgesetzt werden. Öffne die Kundenstammdaten des Kunden, für den das Mahnwesen ausgesetzt werden soll. Setze das Mahnwesen für den Kunden aus, indem du den Schalter "Mahnwesen deaktivieren" aktivierst. Zusätzlich ist es möglich für einzelne Kunden die Mahngebühren über die Schalter "Gebühren anwenden" zu deaktivieren. Kundenstammdaten Einstellungen Speichere die Änderungen, indem du auf "Speichern" klickst. ### Für einzelne Rechnungen In den Rechnungsdetails kann das Mahnwesen für die jeweilige Rechnung ausgesetzt werden. Öffne die Rechnungsdetails der Rechnung, für die das Mahnwesen ausgesetzt werden soll. Setze das Mahnwesen für die Rechnung aus, indem du unterhalb der Rechnungsdetails, im Bereich "Mahnwesen" den Button "Pausieren" auswählst. Im folgenden Dialog kannst du optional unter "Pausieren bis" ein Datum wählen. Bis zu diesem Tag ruht das Mahnwesen, am Folgetag wird es automatisch fortgesetzt. Ohne Datum bleibt der Mahnstopp bestehen, bis du ihn wieder aufhebst. Zu diesem Zeitpunkt offene Zahlungserinnerungen oder Mahnungen bleiben weiterhin bestehen. Rechnungsdetails Einstellungen Um das Mahnwesen für die Rechnung wieder zu aktivieren, klicke auf den Button "Fortsetzen". Anschließend wird die nächste gültige Mahnstufe für die Rechnung ermittelt und das Mahnwesen entsprechend fortgesetzt. Rechnungsdetails Einstellungen ## Zahlungseingang verbuchen ## Beispiele ### Standard **Folgendes Regelwerk ist eingerichtet** * Die **1. Zahlungserinnerung** soll nach 14 Tagen erfolgen. * Die **2. Zahlungserinnerung** soll nach 7 Tagen erfolgen. * Die **3. Zahlungserinnerung** soll nach 7 Tagen erfolgen. * Die **1. Mahnung** soll nach 7 Tagen erfolgen. **Folgender Ablauf ist gegeben** * Die Rechnung ist am 10.05. fällig. * Die 1. Zahlungserinnerung wird am 24.05. erstellt. * Die 2. Zahlungserinnerung wird am 31.05. erstellt. * Die **3. Zahlungserinnerung** wird am 07.06. erstellt. * Die **1. Mahnung** wird am 14.06. erstellt. ### Ausgesetztes Mahnwesen **Folgendes Regelwerk ist eingerichtet** * Die **1. Zahlungserinnerung** soll nach 14 Tagen erfolgen. * Die **2. Zahlungserinnerung** soll nach 7 Tagen erfolgen. * Die **3. Zahlungserinnerung** soll nach 7 Tagen erfolgen. **Folgender Ablauf ist gegeben** * Die Rechnung ist am 10.05. fällig. * Die 1. Zahlungserinnerung wird am 24.05. erstellt. * Das Mahnwesen wird am 25.05. deaktiviert. * Das Mahnwesen wird am 01.06. reaktiviert. * Die 2. Zahlungserinnerung wird am nach Reaktivierung am 01.06. erstellt, da die vorherige Zahlungserinnerung bereits mehr als 7 Tage überfällig ist. * Die **3. Zahlungserinnerung** wird am 08.06. erstellt, da dann erst die 2. Zahlungserinnerung mehr als 7 Tage überfällig ist. # Features Source: https://docs.fynn.eu/guide/entitlements/introduction Erstelle und verwalte Features für deine Abo-Produkte. # Übersicht Die Features Integration ermöglicht es, dynamische Feature-Sets für deine Abonnement-Produkte zu erstellen und zu verwalten. Diese "Features" sind Leistungsmerkmale, die dein Produkt oder Service auszeichnen. Sobald ein Abonnement mit einem solchen Produkt erstellt wird – sei es über einen Checkout-Link oder manuell – werden die konfigurierten Features mit den entsprechenden Werten ins Abonnement übertragen. ### Use-Cases * **SaaS-Lösungen**: Stelle für deine Kunden Feature-Sets wie Benutzeranzahl (Quantity), Funktions-Switches (z. B. "White Labeling aktiviert"), Custom-SLAs (Basic, Silber, Gold) oder Mengen-Ranges (z. B. "5 GB Speicherplatz") bereit. * **Hosting- oder Server-Produkte**: Definiere RAM, CPU-Kerne, IP-Adressen als Features für Serverangebote. * **Spezielle Zusatzfunktionen**: Ergänze individuelle Features (z. B. eine persönliche Onboarding-Session), um Kundenbedürfnisse flexibel zu erfüllen. ## Feature-Typen und Status Features sind konfigurierbare Leistungsmerkmale für deine Abos, die in unterschiedlichen Typen erstellt werden können: * **Switch**: Ein-/Ausschalten bestimmter Funktionalitäten. * **Quantity**: Auswahl vordefinierter Mengen (z. B. "5 User", "10 User"). * **Custom**: Auswahl aus vorgegebenen Textwerten (z. B. "SLA Basic", "SLA Silber", "SLA Gold"). * **Range**: Manuelle Eingabe eines Wertes innerhalb eines bestimmten Rahmens, optional "unlimitiert" auf einer oder beiden Seiten. Jedes Feature hat zudem einen Status: * **Entwurf (Draft)**: Das Feature kann Produkten zugeordnet werden, wird aber noch nicht in Abos übernommen. * **Aktiv (Active)**: Das Feature wird beim Erstellen eines neuen Abos übernommen. * **Archiviert (Archived)**: Das Feature ist nicht mehr für neue Abos verfügbar, bleibt aber in bestehenden Abos unverändert. **Tipp:** Mit diesen Status kannst du Features vorab planen, testen und später aktivieren, ohne laufende Abos zu beeinflussen. ## Beispiel für den Einsatz von Features Stelle dir vor, du betreibst eine SaaS-Lösung mit dem Produkt "Professional". Dieses Produkt hat standardmäßig das Switch-Feature "White Labeling". Für den Preis "jährlich" fügst du ein Custom-Feature "SLA Gold" hinzu. Bucht ein Kunde das Produkt "Professional" mit dem Preis "jährlich", erhält er **automatisch** beide Features: White Labeling vom Produkt und SLA Gold vom Preis. ## Erstellen eines neuen Features Wähle **Features** im Hauptmenü aus, um die Liste der Features anzuzeigen. Klicke auf **Neu**. Fülle die Felder aus: * **Name**: Der Name des Features, z. B. "White Labeling". Dieser wird intern angezeigt und kann in Zukunft ggfs. auch im Kundenbereich sichtbar sein. * **Typ**: Wähle zwischen Switch, Quantity, Custom oder Range. Je nach Typ stehen weitere Einstellungen zur Verfügung. * **Beschreibung**: Eine kurze Beschreibung des Features, dies ist zur einfacheren internen Zuordnung gedacht. * **Status**: Wähle zwischen Entwurf, Aktiv oder Archiviert. * **Einheit**: Eine optionale Einheit, z. B. "User", "GB", "SLA", die bei Quantity oder Range verwendet wird und eine bessere Lesbarkeit und Verständlichkeit ermöglicht. * **Optionen**: Je nach Typ stehen weitere Einstellungen zur Verfügung, z. B. für Quantity die Auswahl der Mengen, für Range die Definition des Bereichs oder für Custom die Auswahl der Werte. * **Gültig ab**: Ein optionales Datum, ab dem das Feature aktiv ist und in neuen Abos übernommen wird. Für Bestandsabos ist dies nicht relevant. * **Gültig bis**: Ein optionales Datum, bis zu dem das Feature aktiv ist und in neuen Abos übernommen wird. Für Bestandsabos ist dies nicht relevant. * **Technische ID**: Eine optionale technische ID, die bspw. das Feature in deinem System identifiziert, z. B. "global.white-labeling". Feature erstellen Klicke auf **Feature erstellen**, um das Feature zu erstellen. Das Feature ist nun zur Zuordnung an Produkte und Preise bereit. Verwende hierfür den [Feature erstellen](/api-reference/feature/create-feature) Endpunkt. ```bash theme={null} POST /entitlements/features ``` Alternativ kannst du die [Features abrufen](/api-reference/features/get-features), um die Liste der Features zu erhalten. ## Features zuordnen Durch die Zuordnung von Features zu Produkten oder spezifischen Preisen stellst du sicher, dass bei der Erstellung eines Abonnements automatisch die relevanten Leistungsmerkmale übernommen werden. * Features am **Produkt** sind immer gegeben. * Durch Features am **Preis** können zusätzliche oder abweichende Eigenschaften ergänzt werden. Dies ermöglicht es, für jährliche Tarife z. B. zusätzliche Features zu definieren. * Überschneidet sich ein Feature am Produkt und am Preis, gilt die Definition vom Preis. Zusätzlich lassen sich Start- und Enddaten für Features festlegen, um Releases oder zeitlich begrenzte Aktionen vorzubereiten. Liste der Feature-Zuordnung ### Hinzufügen eines Features zu einem Produkt Navigiere zu **Produkte** und wähle das gewünschte Produkt aus. Wähle nun das gewünschte Feature aus der Liste aus, setze den Wert und ggfs. die Gültigkeit. Feature zum Produkt hinzufügen Klicke auf **Speichern**, um das Feature dem Produkt zuzuweisen. Sollte das Feature zeitlich nicht eingeschränkt sein, wird dieses ab sofort in allen neuen Abos mit diesem Produkt übernommen. Ist das Feature zeitlich eingeschränkt, wird es nur in neuen Abos übernommen, die in diesem Zeitraum erstellt werden. Das Feature muss aktiv sein, um in neuen Abos übernommen zu werden. Es darf nicht archiviert oder im Entwurf sein. Verwende hierfür den [Feature zum Produkt hinzufügen](/api-reference/feature/assign-feature) Endpunkt. ```bash theme={null} POST /entitlement/feature-assignments ``` ### Hinzufügen eines Features zu einem Preis (optional) Navigiere zu **Produkte** und wähle das gewünschte Produkt aus. Wähle den gewünschten Preis aus und klicke auf **Bearbeiten**. Wähle nun das gewünschte Feature aus der Liste aus, setze den Wert und ggfs. die Gültigkeit. Feature zum Preis hinzufügen Klicke auf **Speichern**, um das Feature dem Preis zuzuweisen. Sollte das Feature zeitlich nicht eingeschränkt sein, wird dieses ab sofort in allen neuen Abos mit diesem Produkt & Preis übernommen. Ist das Feature zeitlich eingeschränkt, wird es nur in neuen Abos übernommen, die in diesem Zeitraum erstellt werden. Das Feature muss aktiv sein, um in neuen Abos übernommen zu werden. Es darf nicht archiviert oder im Entwurf sein. Verwende hierfür den [Feature zum Preis hinzufügen](/api-reference/feature/assign-feature) Endpunkt. ```bash theme={null} POST /entitlement/feature-assignments ``` ## Abonnements und Features ### Anlegen eines neuen Abonnements mit Features Beim Erstellen eines neuen Abonnements oder Hinzufügen eines neuen Produktes, über die Web-App oder API werden automatisch alle Features des Produkts und des Preises übernommen. Die Features werden nur beim Erstellen eines Abonnements übernommen. Änderungen an den Features im Produkt oder Preis wirken sich nicht auf bestehende Abos aus. ### Hinzufügen individueller Features Im Abonnement kannst du alle übernommenen Features einsehen, aktivieren/deaktivieren oder weitere Features hinzufügen, die nicht an ein Produkt oder einen Preis gebunden sind. 1. Öffne das gewünschte Abo. 2. Navigiere zum Reiter **Features**. 3. Hier siehst du alle Features, ihre Herkunft und ihren Status. 4. Klicke auf **Neues Feature hinzufügen**, um ein individuelles Feature hinzuzufügen. 5. Speichere die Änderungen. Verwende hierfür den [Feature zum Produkt hinzufügen](/api-reference/feature/assign-feature) Endpunkt. ```bash theme={null} POST /entitlement/feature-assignments ``` ### Abrufen von Features in einem Abonnement Um die Features eines Abonnements abzurufen, gibt es verschiedene Möglichkeiten: #### Webhook abonnieren Wir empfehlen die Abonnierung des `entitlement.state.updated` Webhooks, um bei Änderungen in den Features informiert zu werden. Hierbei wird beim Hinzufügen, Entfernen eines Features (manuell oder durch Produkt-Änderung) am Abo ein Webhook ausgelöst. Läuft ein Feature ab, oder wird es durch das "gültig ab" oder "gültig bis" Datum aktiviert/deaktiviert, wird ebenfalls ein Webhook ausgelöst. Beispiel Payload: ```json theme={null} { "event": { "id": "ad9f8b8b-8b8b-8b8b-8b8b-8b8b8b8b8b8b", "type": "entitlement.state.updated", "version": "v1", "createdAt": "2022-01-01T12:00:00Z" }, "data": { "customer": { "id": "ad8f8b8b-8b8b-8b8b-8b8b-8b8b8b8b8b8b", "customerNumber": "CUS-1234", [...] }, "subscription": { "id": "ad8f8b8b-8b8b-8b8b-8b8b-8b8b8b8b8b8b", "number": "SUB-1234", [...] }, "entitlements": [ { "entitlementId": "ad8f8b8b-8b8b-8b8b-8b8b-8b8b8b8b8b8b", "featureId": "included-users", "featureName": "Included Users", "value": "5" }, { "entitlementId": "ad8f8b8b-8b8b-8b8b-8b8b-8b8b8b8b8b8b", "featureId": "addon-b", "featureName": "Addon B", "value": "true" }, { "entitlementId": "ad8f8b8b-8b8b-8b8b-8b8b-8b8b8b8b8b8b", "featureId": "sla-level", "featureName": "SLA Level", "value": "gold" } ] } } ``` #### API-Endpunkt abrufen Alternativ kannst du die Features eines Abonnements über den [Abonnement-Endpunkt](/api-reference/entitlement/get-available-features) abrufen. Der Endpunkt ist auf 240 Anfragen pro Minute, pro Organisation begrenzt. Wir empfehlen daher die Verwendung des Webhooks. ## Entitlement Status Jedes Entitlement in einem Abonnement hat einen berechneten Status, der den aktuellen Zustand anzeigt: * **Active**: Das Entitlement ist aktiv und liegt innerhalb des Gültigkeitszeitraums. Der Kunde kann das Feature nutzen. * **Pending**: Das Entitlement ist aktiviert, aber das `validFrom`-Datum liegt in der Zukunft. Das Feature wird automatisch aktiv, sobald das Datum erreicht ist. * **Disabled**: Das Entitlement wurde manuell deaktiviert. * **Expired**: Das `validUntil`-Datum ist abgelaufen. Das Entitlement war aktiv, ist aber nicht mehr gültig. Der Status wird automatisch basierend auf dem `active`-Flag und den Gültigkeitsdaten (`validFrom`, `validUntil`) berechnet. Bei Änderungen wird ein `entitlement.state.updated` Webhook ausgelöst. ### Beispiel API-Response ```json theme={null} { "id": "550e8400-e29b-41d4-a716-446655440000", "feature": { "id": "white-labeling", "name": "White Labeling" }, "value": "true", "validFrom": "2026-03-01T00:00:00Z", "validUntil": null, "active": true, "status": "pending" } ``` In diesem Beispiel ist das Entitlement aktiviert (`active: true`), aber da `validFrom` in der Zukunft liegt, ist der Status `pending`. ## Abrufen von Kunden-Entitlements Um die Entitlements eines Kunden abzurufen, muss sich der Kunde bspw. über [OAuth2](/guide/oauth2/introduction) oder einen generierten Access Token authentifizieren. Der Abruf der aktuell aktiven Entitlements erfolgt anschließend über `https://coreapi.io/customer-entitlements` mit folgender Ausgabe: ```json theme={null} { "subscriptionEntitlements": { "": [ "my-feature1", "my-feature2", "my-feature3", "my-feature4" ] }, "entitlements": [ "my-feature1", "my-feature2", "my-feature3", "my-feature4" ] } ``` Hierbei werden unter `entitlements` alle Entitlements der Abonnements zusammengeführt. ## Referenz zur API-Dokumentation Eine ausführliche Referenz aller Endpunkte, Parameter und Rückgaben findest du in unserer [API-Dokumentation Features](/api-reference/feature) und [API-Dokumentation Entitlements](/api-reference/entitlement). Mit der Features Integration kannst du flexibel und skalierbar die Funktionsumfänge deiner Produkte gestalten und dynamisch an deine Kunden ausliefern. Durch die Kombination aus Produkt- und Preis-Features sowie der individuellen Anpassbarkeit im Abonnement selbst stehen dir alle Möglichkeiten offen, um dein Angebot optimal auf die Bedürfnisse deiner Kunden abzustimmen. ## Webhooks Folgende Webhooks sind für die Features-Integration verfügbar: * `feature.created` - Ein neues Feature wurde erstellt. * `feature.updated` - Ein Feature wurde aktualisiert. * `feature.archived` - Ein Feature wurde archiviert. * `entitlement.state.updated` - Die aktuell gültigen Features für ein Abonnement wurden aktualisiert (z.B. durch: eine Änderung des Abonnements; der Features; ein Feature wurde durch "gültig ab" / "gültig bis" hinzugefügt oder entfernt; ein Produkt wurde gekündigt / angepasst und entsprechend dessen Features). Siehe [Abrufen von Features in einem Abonnement](#webhook-abonnieren). # Fynn Functions Source: https://docs.fynn.eu/guide/functions/index Mit Fynn Functions kannst du das Verhalten innerhalb von Fynn anpassen. Fynn Functions erlaubt es den Entwicklern das Verhalten der Backend Logik zu erweitern. Hier erfährst du wie du Fynn Functions einrichtest und verwendest. Diese Erweiterung befindet sich aktuell in einer geschlossenen Beta-Phase. Bitte kontaktiere uns, um Zugang zu erhalten. ## Wie funktioniert Fynn Functions? Fynn Functions erlaubt es dir, eigene Funktionen zu schreiben, die auf Ereignisse in Fynn reagieren. Hierfür stellen wir verschiedene [Erweiterungs-Punkte](#erweiterungs-punkte) zur Verfügung, die du nutzen kannst, um eigene Logik zu schreiben. Sofern für einen Erweiterungs-Punkt eine oder mehrere Funktionen registriert sind, wird diese bei dem entsprechenden Ereignis ausgeführt. Hierbei wird ein Kontext-Objekt übergeben, das Informationen zum Ereignis enthält, dies kann bspw. ein Warenkorb sein. Innerhalb der Funktion kannst du dann beliebige Aktionen ausführen, wie bspw. eine externe API aufrufen. Jede Funktion muss am Ende eine oder mehrere vordefinierte [Operationen](#operationen) zurück geben, die anschließend von Fynn ausgeführt werden. Jeder Erweiterungs-Punkt hat unterschiedliche Kontext-Objekte und Operationen, die du verwenden kannst. ## Laufzeiten Jede Funktion wird in einer isolierten Umgebung ausgeführt, die auf 5 Sekunden begrenzt ist. Bitte beachte, dass sich die Laufzeit einer Funktion direkt auf die Antwortzeit von Fynn auswirkt. ## Funktionalitäten in Fynn Functions Innerhalb von Fynn Functions kannst du alle JavaScript Funktionen verwenden, die auch im Browser verfügbar sind. ## Erweiterungs-Punkte Fynn Functions unterstützt aktuell folgende Erweiterungs-Punkte: * [Checkout](#checkout): `checkout.cart.delivery`, `checkout.cart.cart_item_option` ### Lieferkosten hinzufügen Der `checkout.cart.delivery` Erweiterungs-Punkt kann dazu verwendet werden, um Lieferkosten zum Warenkorb hinzuzufügen. Ist der Preis der Lieferkosten einmalig, wird dieser nur in der 1. Rechnung berechnet und ist nicht wiederkehrend. Andernfalls wird der Preis der Lieferkosten in jeder Rechnung berechnet. #### Kontext-Objekt Der aktuelle Warenkorb des Benutzers Der Ländercode des Lieferlandes, hierbei wird die Rechnungs- und Lieferadresse des Warenkorbs berücksichtigt. #### Operationen Die Produkt-ID die als Lieferkosten hinzugefügt werden soll. Der Preisplan der für die Lieferkosten verwendet werden soll. Wird keiner angegeben, wird der 1. Preis im Produkt verwendet. #### Beispiel ```typescript theme={null} function run (input) { const countryCode = input?.deliveryCountryCode; const itemsCount = input?.cart?.items.length; if (itemsCount === 0) return []; if (countryCode === 'DE') { return [{ __type: 'checkout:add_delivery', product: '14937550-26d0-454a-b4d4-64eabac67663' }]; } if (countryCode === 'CH') { return [{ __type: 'checkout:add_delivery', product: '5a7f267a-087b-4bdf-a620-79a4e2942545' }]; } // more custom logic, e.g. by zip, best price, etc. return []; } ``` ### Produkt-Optionen hinzufügen Der `checkout.cart.cart_item_option` Erweiterungs-Punkt kann dazu verwendet werden, um Auswahl-Optionen im Warenkorb am Produkt anzuzeigen. Checkout Optionen #### Kontext-Objekt Die ID des Produktes Die Produktnummer, sofern diese angegeben ist. Andernfalls ist diese `null`. Werte der Benutzerdefinierten Attribute des Produktes. Das aktuelle Produkt / Warenkorb-Item im Warenkorb Die aktuelle Produkt-ID #### Operationen Das Produkt für das die Optionen hinzugefügt werden sollen. Der Name der Optionsauswahl, welcher im Webhook verfügbar ist. Der Name der Optionsauswahl, welcher im Checkout angezeigt wird. Die Optionen die zur Auswahl stehen. Alternativ können Produkt-Optionen auf Basis eines [Benutzerdefiniertes Attributes](/guide/tenant/custom-fields) im Produkt hinzugefügt werden. Der Name der Optionsauswahl, welcher im Webhook verfügbar ist. Der Name der Optionsauswahl, welcher im Checkout angezeigt wird. Das Feld welches im Produkt als [Benutzerdefiniertes Attribut](/guide/tenant/custom-fields) (Typ: Liste) verfügbar sein muss, um dessen Listen-Optionen anzuzeigen. Regex, um eine Listen-Option als Standard vorauszuwählen. Bspw. `/.* \(Aktuell\)/i` (muss (Aktuell) beinhalten). Ob die Option vorausgewählt ist. Der Name der Option, welcher im Checkout angezeigt wird. Der Wert der Option, welcher im Webhook verfügbar ist. #### Beispiel ```typescript theme={null} function run(input) { return [ { __type: 'checkout:add_cart_item_option_set', product: '0ba377f0-d9e9-4338-a107-9209a6e0f1fb', name: 'ab Ausgabe', label: 'ab Ausgabe', options: [ { label: 'Nr. 24', value: '24' }, { label: 'Nr. 25', value: '25', preselected: true, }, { label: 'Nr. 26', value: '26' }, ] } ]; } ``` ## Funktion registrieren Um eine Funktion zu registrieren, erstelle ein Support-Ticket um den Zugang zu Fynn Functions zu erhalten. ## Globale Kontext-Objekte ```typescript theme={null} export type CartItemProduct export type CartPublicCustomerAddress = { id: string; firstName?: string; lastName?: string; companyName?: string; street: string; houseNumber?: string; zip: string; city: string; addition?: string; countryCode: string; costCentre?: string; vatId?: string; } export type CartPublicItem = { name: string; description?: string; quantity: number; type: 'product' | 'plan' | 'delivery'; id: string; product: { id: string; number: string | null; customFields: Record; }, periods?: { contractPeriod: string; cancellationPeriod: string; }[], quantityDetails: { aggregationType: 'count' | 'count_unique' | 'max' | 'sum' | 'average' | 'last_value'; unit: string; description?: string; quantityEditable: boolean; }, price: { currencyCode: string; taxRate?: number; totalNetAmount: number; type: 'recurring' | 'instant_metered' | 'metered'; calculationType: 'flat_fee' | 'per_unit' | 'tiered' | 'volume' | 'stair_step' | 'percentage'; payInAdvance: boolean; freeUnits?: number; price: { amount?: number; items?: { from: number; to?: number; amount: number; flatAmount: number; }, percentage?: number; fixedAmount?: number; }; recurring?: { interval: 'day' | 'week' | 'month' | 'year'; intervalCount?: number; trialPeriodDays?: number; recurringAmount?: number; } }, optionSets: CartPublicItemOptionSet[]; } export type CartPublicItemOptionSet = { label: string; name: string; options: CartPublicItemOption[]; } export type CartPublicItemOption = { label: string; value: string | number | boolean; preselected: boolean; product?: string | null; pricePlan?: string | null; } export type CartDiscountDetails = { discount: { code: string; name: string; type: 'percentage' | 'fixed_amount'; percentage?: number; fixedAmount?: string; frequency: 'once' | 'limited' | 'lifetime'; frequencyInterval?: number; }; totalAmount: string; totalNetBeforeDiscount: string; }; export type CartPublicPrice = { amountDue: number; currencyCode: string; netAmount?: number; taxes?: { netAmount: number; taxAmount: number; rate: number; }[]; discountDetails?: CartDiscountDetails; } export type CartPublicSettings = { allowCoupons: boolean; forceCompany: boolean; backButton?: { label?: string; url: string; }; showDeliveryAddress: boolean; } export type CartPublic = { id: string; customer?: string; email?: string; invoiceAddress?: CartPublicCustomerAddress; deliveryAddress?: CartPublicCustomerAddress; items: CartPublicItem[]; price: CartPublicPrice; completionDetails?: { invoice: { number: string; downloadLink: string; amount: string; } | null, payment: { reference: string | null; method: string; bankAccount?: { iban: string; bic: string; bankName: string; accountHolder: string; reference: string; }, qrCode?: string; }, subscription?: { number: string; }, confirmationMessage?: string; backToProviderUrl?: string | null; }, settings: CartPublicSettings; } ``` # Belegvorlagen & Platzhalter Source: https://docs.fynn.eu/guide/invoices/document-templates Alle verfügbaren Platzhalter für PDF-Belegvorlagen nach Dokumenttyp Fynn generiert PDFs für verschiedene Belegtypen. Jede Vorlage unterstützt Platzhalter, die beim Erstellen des Dokuments automatisch durch die tatsächlichen Werte ersetzt werden. ## Dokumenttypen Fynn unterstützt folgende Belegtypen mit eigenen PDF-Vorlagen: | Dokumenttyp | Beschreibung | Verfügbare Platzhalter | | ------------------------- | -------------------------------------- | ------------------------------- | | **Rechnung** | Standardrechnung | Beleg, Organisation, Abonnement | | **Gutschrift** | Gutschrift / Erstattung | Beleg, Organisation, Abonnement | | **Storno** | Stornierung einer Rechnung | Beleg, Organisation, Abonnement | | **Mahnung** | Mahnschreiben | Mahnung, Organisation | | **Kündigungsbestätigung** | Bestätigung einer Abonnement-Kündigung | Abonnement, Organisation | Rechnungen, Gutschriften und Stornos verwenden dieselben Platzhalter — sie basieren alle auf dem Belegmodell. Die Referenzfelder (z.B. `referencedInvoiceNumber`) sind nur bei Gutschriften und Stornos gefüllt. ## Vorlagen bearbeiten Gehe zu [Einstellungen > Belege](https://app.fynn.eu/settings/invoices) und scrolle zu **Vorlagen**. Klicke auf **Bearbeiten** bei der gewünschten Vorlage (Rechnung, Storno, Gutschrift oder Mahnung) und wähle die Sprache. Verwende die unten aufgeführten Platzhalter in den Feldern Titel, Einleitung, Abschlusstext und Informationsfelder. Platzhalter werden in doppelten geschweiften Klammern geschrieben: `{{ platzhalter }}`. ## Platzhalter nach Kategorie ### Beleginformationen Verfügbar für: **Rechnung**, **Gutschrift**, **Storno** | Platzhalter | Beschreibung | Beispielwert | | ------------------ | --------------------- | ------------------------- | | `documentNumber` | Belegnummer | `RE-2026-0001` | | `documentDate` | Belegdatum | `15.02.2026` | | `totalGrossAmount` | Gesamtbetrag (brutto) | `119,00 €` | | `dueDate` | Fälligkeitsdatum | `01.03.2026` | | `dueDateInDays` | Tage bis Fälligkeit | `14` | | `servicePeriod` | Leistungszeitraum | `01.02.2026 - 28.02.2026` | | `customerNumber` | Kundennummer | `KD-10042` | | `dunningLevel` | Mahnstufe | `1` | ### Referenz-Beleg Verfügbar für: **Gutschrift**, **Storno** (Felder der ursprünglichen Rechnung) | Platzhalter | Beschreibung | Beispielwert | | ----------------------------------- | -------------------------------------- | -------------- | | `referencedInvoiceNumber` | Nummer der Ursprungsrechnung | `RE-2026-0001` | | `referencedInvoiceDate` | Datum der Ursprungsrechnung | `01.02.2026` | | `referencedInvoiceDueDate` | Fälligkeitsdatum der Ursprungsrechnung | `15.02.2026` | | `referencedInvoiceTotalGrossAmount` | Bruttobetrag der Ursprungsrechnung | `119,00 €` | ### Zahlungsmethode Verfügbar für: **Rechnung**, **Gutschrift**, **Storno** | Platzhalter | Beschreibung | Beispielwert | | --------------------------- | ------------------------------- | ------------------ | | `paymentMethod.displayName` | Anzeigename der Zahlungsmethode | `SEPA-Lastschrift` | | `paymentMethod.type` | Typ der Zahlungsmethode | `sepa_debit` | | `paymentMethod.gatewayName` | Name des Payment-Gateways | `stripe` | | `paymentMethod.name` | Interner Name | `SEPA Hauptkonto` | ### SEPA-Lastschrift Verfügbar für: **Rechnung**, **Gutschrift**, **Storno** (nur bei SEPA-Zahlungsmethode) | Platzhalter | Beschreibung | Beispielwert | | --------------------------------------------------------- | --------------------------------------- | ----------------------------- | | `isSepa` | Ist SEPA-Lastschrift aktiv | `true` / `false` | | `sepa.iban` | IBAN des Kunden | `DE89 3704 0044 0532 0130 00` | | `sepa.bic` | BIC des Kunden | `COBADEFFXXX` | | `sepa.accountHolder` | Kontoinhaber | `Max Mustermann` | | `sepa.mandateReference` | SEPA-Mandatsreferenz | `MNDT-2026-00001` | | `sepa.creditorId` | Gläubiger-ID | `DE98ZZZ09999999999` | | `sepa.bankName` | Bankname | `Commerzbank` | | `sepa.amount` | Einzugsbetrag | `119,00 €` | | `paymentMethod.sepa.mandateReferenceNumber` | Mandatsreferenznummer | `MNDT-2026-00001` | | `paymentMethod.sepa.mandateReferenceSigningDate` | Mandats-Unterschriftsdatum | `2025-01-15` | | `paymentMethod.sepa.mandateReferenceSigningDateFormatted` | Mandats-Unterschriftsdatum (formatiert) | `15.01.2025` | | `paymentMethod.sepa.iban` | IBAN (formatiert) | `DE89 3704 0044 0532 0130 00` | | `paymentMethod.sepa.bic` | BIC | `COBADEFFXXX` | | `paymentMethod.sepa.bankName` | Bankname | `Commerzbank` | | `paymentMethod.sepa.accountHolder` | Kontoinhaber | `Max Mustermann` | | `paymentMethod.sepa.isFirstSepaDebit` | Ersteinzug | `true` / `false` | | `paymentMethod.sepa.creditorIdentificationNumber` | Gläubiger-ID | `DE98ZZZ09999999999` | ### Überweisung Verfügbar für: **Rechnung**, **Gutschrift**, **Storno** (nur bei Überweisung) | Platzhalter | Beschreibung | Beispielwert | | ------------------------------- | --------------------- | ------------------------ | | `isBankTransfer` | Ist Überweisung aktiv | `true` / `false` | | `bankTransfer.iban` | IBAN des Empfängers | `DE89370400440532013000` | | `bankTransfer.bic` | BIC des Empfängers | `COBADEFFXXX` | | `bankTransfer.accountHolder` | Kontoinhaber | `Fynn GmbH` | | `bankTransfer.bankName` | Bankname | `Commerzbank` | | `bankTransfer.amount` | Überweisungsbetrag | `119,00 €` | | `bankTransfer.usageDescription` | Verwendungszweck | `RE-2026-0001` | ### Kundeninformationen Verfügbar für: **Rechnung**, **Gutschrift**, **Storno** | Platzhalter | Beschreibung | Beispielwert | | -------------------- | ------------ | ------------ | | `customer.firstName` | Vorname | `Max` | | `customer.lastName` | Nachname | `Mustermann` | ### Organisationsinformationen Verfügbar für: **alle Dokumenttypen** | Platzhalter | Beschreibung | Beispielwert | | ----------------------------- | ---------------------- | ------------------------ | | `tenant.name` | Handelsname | `Fynn` | | `tenant.legalCompanyName` | Rechtlicher Firmenname | `Fynn GmbH` | | `tenant.street` | Straße | `Barthelstr.` | | `tenant.housenumber` | Hausnummer | `4` | | `tenant.zip` | Postleitzahl | `50823` | | `tenant.city` | Stadt | `Köln` | | `tenant.countryCode` | Ländercode | `DE` | | `tenant.email` | E-Mail-Adresse | `hi@fynn.eu` | | `tenant.phone` | Telefonnummer | `0221 29246377` | | `tenant.vatId` | USt-IdNr. | `DE123456789` | | `tenant.website` | Website | `https://fynn.eu` | | `tenant.ceo` | Geschäftsführer | `Giuliano Schindler` | | `tenant.bankAccount.iban` | IBAN | `DE89370400440532013000` | | `tenant.bankAccount.bic` | BIC | `COBADEFFXXX` | | `tenant.bankAccount.bankName` | Bankname | `Commerzbank` | ### Abonnementinformationen Verfügbar für: **Rechnung**, **Gutschrift**, **Storno**, **Kündigungsbestätigung** | Platzhalter | Beschreibung | Beispielwert | | --------------------------------- | ----------------------------------------------------- | ----------------- | | `customerNumber` | Kundennummer | `KD-10042` | | `subscription.number` | Abonnementnummer(n) | `SUB-2026-00001` | | `subscription.name` | Abonnementname(n) | `Enterprise Plan` | | `subscription.poNumber` | Bestellnummer(n) (PO) | `PO-12345` | | `subscription.customFields.` | Wert eines benutzerdefinierten Feldes des Abonnements | `LS-2024-001` | Bei Rechnungen mit **mehreren Abonnements** werden die Werte mit Komma getrennt zusammengefasst (z.B. `SUB-001, SUB-002`). Bei manuell erstellten Rechnungen ohne Abonnement-Bezug werden die Platzhalter als leere Zeichenkette aufgelöst. ### Mahnungsinformationen Verfügbar für: **Mahnung** | Platzhalter | Beschreibung | Beispielwert | | ----------------------------------- | ------------------------------------------------------------------- | -------------- | | `documentNumber` | Mahnnummer | `MH-2026-0001` | | `documentDate` | Datum der Mahnung | `15.03.2026` | | `referencedInvoiceNumber` | Nummer der gemahnten Rechnung | `RE-2026-0001` | | `referencedInvoiceDate` | Datum der gemahnten Rechnung | `01.02.2026` | | `referencedInvoiceDueDate` | Fälligkeitsdatum der gemahnten Rechnung | `15.02.2026` | | `referencedInvoiceTotalGrossAmount` | Offener Restbetrag der gemahnten Rechnung (abzüglich Teilzahlungen) | `119,00 €` | | `totalGrossAmount` | Offener Restbetrag inkl. Mahngebühren | `129,00 €` | | `dueDate` | Fälligkeitsdatum der Mahnung | `29.03.2026` | | `customerNumber` | Kundennummer | `KD-10042` | | `dueDateInDays` | Tage bis Fälligkeit | `14` | | `dunningLevel` | Mahnstufe | `2` | ### Angebotsinformationen Verfügbar für: **Angebote** | Platzhalter | Beschreibung | Beispielwert | | -------------- | -------------- | ------------------ | | `offer.number` | Angebotsnummer | `AG-2026-0001` | | `offer.name` | Angebotsname | `Enterprise Paket` | ## Platzhalter-Format Platzhalter können in verschiedenen Formaten verwendet werden: ``` {{ documentNumber }} {{ $documentNumber }} {{documentNumber}} {{$documentNumber}} ``` Alle Datumsangaben werden im Format `dd.mm.yyyy` (z.B. `15.02.2026`) ausgegeben. Geldbeträge werden im deutschen Format mit Währungssymbol formatiert (z.B. `119,00 €`). ## Platzhalter per API abrufen Du kannst die verfügbaren Platzhalter auch programmatisch abrufen: ``` GET /ui/document-placeholder?contexts=invoice,tenant,subscription ``` Mögliche Kontexte: `invoice`, `dunning`, `tenant`, `subscription` ## Positionsgruppen-Format Der Name der Positionsgruppen auf Rechnungen kann unter [Einstellungen > Abrechnung](https://app.fynn.eu/settings/billing) konfiguriert werden. Das Format unterstützt Variablen und Bedingungen. ### Verfügbare Variablen | Variable | Beschreibung | Beispielwert | | --------------------------------- | ------------------------ | ----------------- | | `subscription.name` | Abonnementname | `Enterprise Plan` | | `subscription.number` | Abonnementnummer | `SUB-001` | | `subscription.poNumber` | Bestellnummer (PO) | `PO-12345` | | `subscription.customFields.` | Benutzerdefiniertes Feld | `LS-2024-001` | ### Standardformat ``` {{ subscription.name }}{% if subscription.poNumber %} - PO Number: {{ subscription.poNumber }}{% endif %} ``` Ergebnis: `Enterprise Plan - PO Number: PO-12345` (oder nur `Enterprise Plan`, wenn keine PO-Nummer vorhanden ist). ### Beispiel mit benutzerdefiniertem Feld ``` {{ subscription.name }}{% if subscription.customFields.lieferscheinNummer is defined and subscription.customFields.lieferscheinNummer %} (LS: {{ subscription.customFields.lieferscheinNummer }}){% endif %} ``` Ergebnis: `Enterprise Plan (LS: LS-2024-001)` — oder nur `Enterprise Plan`, wenn das Feld nicht vorhanden ist. Benutzerdefinierte Felder müssen mit `is defined and` geprüft werden, da die Schlüssel nicht bei jedem Abonnement vorhanden sind. Direkte Eigenschaften wie `poNumber` können einfach mit `{% if subscription.poNumber %}` geprüft werden. ## Custom PDF Rendering Wenn du vollständige Kontrolle über das PDF-Layout benötigst, kannst du mit [Custom PDF Rendering](/integrations/custom-pdf-rendering) deine eigene PDF-Engine verwenden. Alle oben aufgeführten Platzhalter stehen auch im Webhook-Payload zur Verfügung. # e-Rechnung Source: https://docs.fynn.eu/guide/invoices/e-invoicing Erstelle und verwalte deine Rechnungen ## Was ist eine e-Rechnung? Eine e-Rechnung ist eine elektronische Rechnung, die digital erstellt, versendet und empfangen wird. Sie ersetzt die klassische Papierrechnung und ist in der Regel in einem standardisierten Format wie z. B. XRechnung oder ZUGFeRD erstellt. Dies ermöglicht einen automatisierten Empfang und Verarbeitung der Rechnung, was die Rechnungsstellung effizienter und kostengünstiger macht. Die e-Rechnung ist ab dem 01.01.2025 für deutsche Unternehmen im Empfang verpflichtend. ## Support für e-Rechnungen Fynn ist **vollständig kompatibel mit dem e-Rechnungsstandard** in Deutschland und Europa, was bedeutet, dass du e-Rechnungen direkt aus Fynn heraus im PDF und XML Format erstellen und versenden kannst. ## Aktivierung der e-Rechnung Alle Rechnungen, Stornos und Gutschriften werden **automatisch** im PDF und XML Format (ZUGFeRD) erstellt und versendet und sind somit gültige e-Rechnungen. ### Einstellungen Du hast die Möglichkeit, den elektronischen Rechnungstyp für den Kunden zu aktivieren. Dies ist insbesondere für Behörden und öffentliche Einrichtungen relevant. Standardmäßig ist die elektronische Rechnung (ZUGFeRD) für den Kunden aktiviert. Hier kannst du folgende Optionen auswählen: * "ZUGFeRD" (Standard) * "XRechnung" Elektronische Rechnung ### Öffentliche Auftraggeber Um Rechnungen bspw. an öffentliche Auftraggeber zu senden, kannst du dies in den Kunden-Einstellungen aktivieren: Gehe zu einem Kunden und wähle unter "elektronische Rechnung" das entsprechende Format aus (x-Rechnung bspw.). Elektronische Rechnung Hinterlege die Leitweg-ID des Kunden. Diese wird benötigt, um die Rechnung an den öffentlichen Auftraggeber zu senden. Speichere die Einstellungen und erstelle die Rechnung. Diese wird automatisch im gewünschten Format erstellt. Die Rechnung wird im entsprechenden XML Format erstellt, allerdings nicht digital über bspw. Peppol versendet. Dieses Feature ist in Planung. # Exporte Source: https://docs.fynn.eu/guide/invoices/exports Exportiere Rechnungen und offene Posten ## OPOS-Liste exportieren Mit der OPOS-Liste kannst du offene Posten (offene Rechnungen) im CSV-Format exportieren, um sie beispielsweise für die Buchhaltung zu verwenden. Hierfür navigiere zu `Belege` > `Rechnungen` und klicke auf `Exportieren`. OPOS-Liste exportieren ## Tabellenansicht exportieren Die Tabelle kann nun vollständig an die eigenen Bedürfnisse angepasst werden und die aktuelle Tabellenansicht als CSV exportiert werden. Zum Export klicke auf `Exportieren` und wähle dort "Tabellenansicht" aus. Rechnungs-Liste ## Rechnungs-Liste filtern Die Rechnungs‑, Zahlungs‑ und Abonnement‑Listen verfügen über einen leistungsfähigen Filterbereich (z.B. für Text-, Datums- und Betragsfilter). Eine allgemeine Einführung findest du unter [Listen und Tabellen](/guide/list-views). Konkrete Beispiele für Rechnungen, Zahlungen und Abos findest du unter [Filter für Rechnungen, Zahlungen und Abos](/guide/invoices/list-filters). # Übersicht Source: https://docs.fynn.eu/guide/invoices/introduction Erstelle und verwalte deine Rechnungen Über das Rechnungsmodul von Fynn kannst du alle deine Rechnungen verwalten, neue Rechnungen erstellen und bestehende Rechnungen bearbeiten. Diese Seite gibt dir einen Überblick über die wichtigsten Funktionen. ## Rechnungen erstellen ### Manuelle Rechnungserstellung Du kannst jederzeit manuell eine neue Rechnung erstellen: 1. Klicke auf das `+` oben rechts 2. Wähle "Rechnung" aus 3. Wähle den Kunden aus 4. Füge Rechnungspositionen hinzu 5. Klicke auf `Entwurf erstellen` oder `Finalisieren und versenden` Manuelle Rechnungserstellung ### Automatische Rechnungserstellung Rechnungen für Abonnements werden automatisch zum konfigurierten Zeitpunkt erstellt. Die Rechnungsstellung erfolgt dabei: * Zum Beginn einer neuen Abrechnungsperiode * Bei Änderungen des Abonnements (anteilige Berechnung) * Bei zusätzlichen Gebühren oder Gutschriften ### Finalisieren und versenden Nachdem du eine Rechnung erstellt hast, kannst du sie finalisieren und an den Kunden senden. Dabei passiert Folgendes: * Die Rechnung wird als PDF und / oder e-Rechnungs-XML generiert * Der Kunde erhält eine E-Mail mit der Rechnung als Anhang, sofern die Benachrichtigungseinstellungen aktiviert sind * Passende Buchungssätze werden automatisch erstellt * Die Rechnung wird im Status `Offen` markiert * Der Zahlungseinzug wird angestoßen * Die Rechnung wird bei Bedarf an die [BCC-Empfänger gesendet](/guide/accounting/introduction#zusaezliche-rechnungs-empfaenger) ## Benachrichtigungen ### Rechnung erneut per E-Mail senden Du kannst eine Rechnung jederzeit erneut per E-Mail an deinen Kunden senden: Navigiere zur gewünschten Rechnung in der Rechnungsübersicht Klicke auf `Aktionen` > `Erneut versenden` Verwende hierfür den [Rechnung erneut senden](/api-reference/invoice/resend-invoice) Endpunkt. ```bash theme={null} PUT /invoices/{id}/resend ``` Die E-Mail wird dann mit der Rechnung als PDF-Anhang an die hinterlegte E-Mail-Adresse des Kunden gesendet. ## Verlaufsprotokoll Jede Änderung an einer Rechnung wird im Verlaufsprotokoll dokumentiert. Du findest das Protokoll direkt in der Detailansicht einer Rechnung in dem Bereich "Verlauf". Dort siehst du: * Wer die Änderung vorgenommen hat * Was geändert wurde * Wann die Änderung erfolgte ## Zahlungen Für Rechnungen können Zahlungen manuell hinzugefügt oder erneut angestoßen werden. Weitere Details findest du unter [Zahlungen verwalten](/guide/payments/manage-payments). ## Zahlungserinnerungen / Mahnungen Mahnwesen Übersicht In der Mahnwesen-Übersicht siehst du: * Die aktuelle Mahnstufe * Das Datum der letzten Erinnerung * Möglichkeit zum Pausieren des Mahnwesens * Zugriff auf die Details des Mahnprozesses Du kannst das Mahnwesen für einzelne Rechnungen pausieren. Dies ist nützlich, wenn du beispielsweise: * Mit dem Kunden eine Ratenzahlung vereinbart hast * Eine Zahlungsfrist verlängert wurde * Auf eine ausstehende Gutschrift gewartet wird Wenn du das Mahnwesen später wieder aktivierst, wird automatisch die nächste zutreffende Mahnstufe angewendet. **Beispiel:** 1. Eine Rechnung ist seit 10 Tagen überfällig und in Mahnstufe 1 2. Du pausierst das Mahnwesen für 14 Tage wegen Ratenzahlungsvereinbarung 3. Nach Aktivierung (Tag 24) greift automatisch Mahnstufe 2, da die Frist für Mahnstufe 1 (z.B. 7 Tage) bereits überschritten ist Weitere Details findest du unter [Zahlungsausfälle](/guide/dunning/introduction). ## Rechnungen stornieren Eine Rechnung kann nur storniert werden, wenn: * Noch keine Zahlung eingegangen ist * Bei Inhouse-SEPA: Die SEPA-Datei noch nicht als "hochgeladen" markiert wurde Navigiere zur gewünschten Rechnung in der Rechnungsübersicht Klicke auf `Stornieren` Wähle eine der folgenden Optionen: * `Ja, stornieren`: Die Rechnung wird einfach storniert * `Ja, stornieren und duplizieren`: Die Rechnung wird storniert und eine neue Rechnung mit den gleichen Positionen wird erstellt Verwende hierfür den [Rechnung stornieren](/api-reference/invoice/cancel-invoice) Endpunkt. ```bash theme={null} POST /invoices/{id}/cancel ``` Bei der Stornierung passiert Folgendes: * Eine Stornorechnung wird erstellt, die die ursprüngliche Rechnung ausgleicht * Falls [Buchungen](/guide/accounting/introduction) aktiviert sind, werden entsprechende Storno-Buchungen (z.B. PRAP) automatisch ausgeführt * Der Kunde erhält eine Benachrichtigung per E-Mail, wenn dies in den [Benachrichtigungseinstellungen](/guide/notifications/introduction) aktiviert ist ## Rechnung schließen Um Rechnungen aus der Übersicht zu entfernen, kannst du sie schließen. Dies ist nützlich, wenn du Rechnungen archivieren möchtest, die nicht mehr relevant sind und noch nicht an den Kunden gesendet wurden. Voraussetzung für das Schließen einer Rechnung: * Die Rechnung ist im Status `Entwurf` oder `Freigabe ausstehend` Auswirkungen des Schließens: * Die Rechnung wird in der Übersicht ausgeblendet * Die Rechnung kann nicht mehr bearbeitet werden * Die Rechnungsbeträge werden nicht in den Statistiken und Auswertungen berücksichtigt * Die Rechnung wird im Verlaufsprotokoll als "geschlossen" protokolliert Der Kunde wird nicht über das Schließen der Rechnung informiert. Navigiere zur gewünschten Rechnung in der Rechnungsübersicht Klicke auf `Aktionen` > `Rechnung schließen` Bestätige die Schließung der Rechnung mit `Ja, schließen`. Optional kannst du eine Notiz hinzufügen, die im Verlauf protokolliert wird. Rechnung schließen Verwende hierfür den [Rechnung schließen](/api-reference/invoice/close-invoice) Endpunkt. ```bash theme={null} POST /invoices/{id}/close ``` ## Gutschrift erstellen Gutschriften können für Rechnungen erstellt werden, um den Rechnungsbetrag zu reduzieren. Dies ist nützlich, wenn beispielsweise: * Ein Rabatt nachträglich gewährt wird * Der Rechnungsbetrag korrigiert werden muss * Ein Produkt zurückgegeben wurde Um eine Gutschrift zu erstellen, muss für eine Rechnung bereits eine Zahlung erfasst worden sein. Navigiere zur gewünschten Rechnung in der Rechnungsübersicht Klicke auf `Aktionen` > `Gutschrift erstellen` Wähle die Positionen und die Menge aus, die gutgeschrieben werden sollen. Zudem kannst du einen individuellen Text für die Gutschrift hinterlegen, der auf der Gutschrift unterhalb der Positionen und oberhalb des allgemeinen "Abschluss"-Textes angezeigt wird. Der "Abschluss" - Text kann unter "Einstellungen" > "Belege" > "Vorlagen" > "Gutschriften" angepasst werden. Gutschrift erstellen Die Gutschrift wurde erstellt und die Rechnungsbeträge wurden automatisch angepasst. Die Gutschrift wird im Status `Offen` markiert. Anschließend wird: * der Kunde über die Gutschrift informiert (sofern in den [Benachrichtigungseinstellungen](/guide/notifications/introduction) aktiviert) * die Gutschrift im Verlaufsprotokoll dokumentiert * die Buchungssätze automatisch erstellt Die Menge der gutgeschriebenen Positionen wird von der Rechnung abgezogen. Die Menge kann also nicht noch einmal gutgeschrieben werden. Um die Gutschrift als `Bezahlt` zu markieren, kannst du eine Zahlung hinzufügen, die dem gutgeschriebenen Betrag entspricht. Der Betrag muss positiv sein. Siehe hierzu [Zahlungen verwalten](/guide/payments/manage-payments). Verwende hierfür den [Gutschrift erstellen](/api-reference/invoice/create-credit-note) Endpunkt. ```bash theme={null} POST /invoices/{id}/credit-note ``` # Korrigieren Source: https://docs.fynn.eu/guide/invoices/invoice-actions Storniere, erstatte oder korrigiere Rechnungen mit den passenden Aktionen Wenn du eine Rechnung korrigieren oder anpassen musst, stehen dir verschiedene Aktionen zur Verfügung. Diese Aktionen sind abhängig vom Status der Rechnung und werden automatisch gefiltert, sodass nur die passenden Optionen angezeigt werden. ## Übersicht der Aktionen Die verfügbaren Aktionen werden dynamisch basierend auf dem Rechnungsstatus ermittelt. Nicht alle Aktionen sind für jede Rechnung verfügbar. Um eine Aktion auszuführen, klicke auf "Korrigieren" in der Rechnungsdetailansicht. Das System zeigt dir dann alle verfügbaren Aktionen für diese spezifische Rechnung an. ## Beleg stornieren **Wann verfügbar**: Nur für unbezahlte Rechnungen **Was passiert**: * Die Rechnung wird storniert und als "nie existiert" behandelt * Ein Stornobeleg wird erstellt * Falls Guthaben verwendet wurde, wird dieses automatisch zurückgebucht * Keine Auszahlung erfolgt, da keine Zahlung eingegangen ist **Wann verwenden**: * Die Rechnung wurde fälschlicherweise erstellt * Noch keine Zahlung wurde geleistet Eine Stornierung kann nur durchgeführt werden, wenn noch keine Zahlung eingegangen ist. Bei bereits bezahlten Rechnungen musst du eine andere Aktion wählen. ## Rückerstattung **Wann verfügbar**: Nur für bezahlte oder teilweise bezahlte Rechnungen **Was passiert**: * Eine Gutschrift wird erstellt * Der Kunde erhält eine Rückerstattung (Auszahlung) * Die Gutschrift wird als neue Verbindlichkeit behandelt * Das ursprünglich verwendete Guthaben (falls vorhanden) wird **nicht** zurückgebucht **Wann verwenden**: * Der Kunde hat bereits bezahlt und soll sein Geld zurückerhalten * Ein Produkt wurde zurückgegeben * Ein Service wurde nicht erbracht und der Kunde soll entschädigt werden Bei einer Rückerstattung wird das ursprünglich verwendete Guthaben nicht zurückgebucht, da die Gutschrift ein neuer, separater Beleg ist. Die ursprüngliche Rechnung bleibt als abgeschlossene Transaktion bestehen. ## Gutschrift für zukünftige Rechnungen **Wann verfügbar**: Nur für bezahlte oder teilweise bezahlte Rechnungen **Was passiert**: * Eine Gutschrift wird erstellt * Der Gutschriftsbetrag wird dem **Kundenguthaben** hinzugefügt * Das Guthaben kann automatisch auf zukünftige Rechnungen angewendet werden * **Keine Auszahlung** erfolgt **Wann verwenden**: * Du möchtest dem Kunden einen Rabatt gewähren, der auf zukünftige Rechnungen angewendet wird * Der Kunde soll eine Gutschrift erhalten, die er später nutzen kann * Du möchtest dem Kunden Guthaben geben, ohne Geld auszuzahlen Das hinzugefügte Guthaben wird automatisch auf zukünftige Rechnungen angewendet, sobald diese finalisiert werden. Der Kunde muss dann weniger bezahlen. ## Skonto gewähren **Wann verfügbar**: Nur für finalisierte, teilweise bezahlte Rechnungen **Was passiert**: * Eine Anpassung wird auf der Rechnung erstellt * Der offene Rechnungsbetrag wird reduziert * Der Kunde muss weniger bezahlen **Wann verwenden**: * Du möchtest einen Skonto-Rabatt gewähren (z.B. bei schneller Zahlung) * Ein Rabatt soll direkt auf die Rechnung angewendet werden Skonto wird direkt als Anpassung auf der Rechnung erstellt und reduziert den zu zahlenden Betrag. ## Gutschrift korrigieren **Wann verfügbar**: Nur in speziellen Fällen, wenn eine Gutschrift nach einer Stornierung existiert **Was passiert**: * Eine Korrektur-Rechnung für die Gutschrift wird erstellt * Die Gutschrift und die neue Rechnung werden gegenseitig angepasst * Beide Belege werden als bezahlt markiert * **Keine Auszahlung** erfolgt **Wann verwenden**: * Eine Gutschrift wurde erstellt, aber sollte eigentlich nicht existieren * Die Gutschrift soll durch eine Rechnung ausgeglichen werden Diese Aktion ist ein Edge Case und wird nur in speziellen Situationen angezeigt, beispielsweise wenn nach einer Stornierung eine Gutschrift verbleibt. ## Beleg abschreiben **Wann verfügbar**: Nur für unbezahlte Rechnungen **Was passiert**: * Der Beleg erhält den Status "Abgeschrieben" * Eine Buchung "Forderungsverlust aus Insolvenz" oder "Forderungsverlust aus Verjährung" wird auf das konfigurierte Konto gebucht: Forderungsverluste 19 % USt (SKR03: 2406, SKR04: 6936), Forderungsverluste 7 % USt (SKR03: 2401, SKR04: 6931) oder Forderungsverluste ohne USt. (SKR03: 2400, SKR04: 6930) * Die Kontonummern sind in den Buchungskonten-Einstellungen anpassbar * Bei Abschreibung wegen Insolvenz wird der Kunde in der App als insolvent markiert und offene Zahlungsanforderungen werden gestoppt * Der Kunde wird nicht per E-Mail benachrichtigt **Wann verwenden**: * Eine Forderung ist endgültig uneinbringlich, weil der Kunde zahlungsunfähig ist (Insolvenz) oder die Forderung verjährt ist (Verjährung) Für diese Aktion benötigst du die Berechtigung "Rechnungen abschreiben", die einem Benutzer über die Rollenverwaltung zugewiesen werden kann. Rechnungen mit deutschen Umsatzsteuer-Anteilen werden auf das passende DATEV-Automatikkonto gebucht: Forderungen mit 19 % USt auf das Konto Forderungsverluste, Forderungen mit 7 % USt auf das Konto Forderungsverluste 7 % USt. DATEV korrigiert die Umsatzsteuer nach § 17 UStG automatisch. Rechnungen ohne deutsche Umsatzsteuer, z. B. aus Drittland-Umsätzen oder Reverse-Charge-Leistungen, werden auf das Konto Forderungsverluste ohne USt. gebucht. ## Aktionen im Vergleich | Aktion | Auszahlung? | Guthaben-Impact | Debitoren-Saldo | Verfügbar für | | ---------------------------------------- | ----------- | --------------------------- | ----------------- | ------------------------------------------- | | **Stornieren** | Nein | Guthaben wird zurückgebucht | Wird ausgeglichen | Unbezahlte Rechnungen | | **Rückerstattung** | Ja | Keine Auswirkung | Wird reduziert | Bezahlte/teilweise bezahlte Rechnungen | | **Gutschrift für zukünftige Rechnungen** | Nein | Guthaben wird hinzugefügt | Wird reduziert | Bezahlte/teilweise bezahlte Rechnungen | | **Skonto gewähren** | Nein | Keine Auswirkung | Wird reduziert | Finalisierte, teilweise bezahlte Rechnungen | | **Gutschrift korrigieren** | Nein | Keine Auswirkung | Wird angepasst | Spezielle Fälle | | **Abschreiben** | Nein | Keine Auswirkung | Wird ausgeglichen | Unbezahlte Rechnungen | ## Häufige Fragen Die verfügbaren Aktionen hängen vom Status der Rechnung ab. Das System zeigt nur die Aktionen an, die für den aktuellen Status sinnvoll sind. Beispielsweise kann eine bereits bezahlte Rechnung nicht mehr storniert werden. * **Stornierung**: Guthaben wird zurückgebucht * **Rückerstattung**: Keine Auswirkung auf Guthaben * **Gutschrift für zukünftige Rechnungen**: Guthaben wird hinzugefügt Nein, Aktionen können nicht direkt rückgängig gemacht werden. Du musst eine neue Aktion ausführen, um das Ergebnis zu korrigieren. Alle Aktionen werden im Verlaufsprotokoll dokumentiert. Ja, wenn Buchungen in deinen Einstellungen aktiviert sind, werden entsprechende Buchungssätze automatisch erstellt, wenn du eine Aktion ausführst. # Rechnungsdetails Source: https://docs.fynn.eu/guide/invoices/invoice-detail Alle Informationen zu einer Rechnung auf einen Blick ## Übersicht Die Rechnungsdetailseite bietet dir einen umfassenden Überblick über alle relevanten Informationen einer Rechnung. Du findest hier Kennzahlen, Positionen, Zahlungsinformationen und die vollständige Aktivitätshistorie. *** ## Kennzahlen Am oberen Rand der Rechnungdetailseite siehst du vier wichtige Kennzahlen: | Kennzahl | Beschreibung | | ---------------- | ------------------------------------------------------- | | **Bruttobetrag** | Gesamtbetrag des Rechnungs inklusive Mehrwertsteuer | | **Bezahlt** | Summe aller eingegangenen Zahlungen für diesen Rechnung | | **Offen** | Noch ausstehender Betrag (Bruttobetrag - Bezahlt) | | **Fälligkeit** | Zahlungsziel des Rechnungs | Die Kennzahlen haben visuelle Indikatoren: * **Bezahlt** wird grün dargestellt, wenn der Rechnung vollständig bezahlt wurde * **Offen** wird rot dargestellt, wenn noch ein Betrag aussteht *** ## Tabs Die Rechnungdetailseite ist in mehrere Tabs unterteilt: ### Übersicht Der Übersicht-Tab zeigt: * **Positionen**: Alle Rechnungspositionen mit Menge, Einzelpreis und Gesamtpreis * **Zusammenfassung**: Nettobetrag, Steuer und Bruttobetrag * **Abschlusstext**: Der konfigurierte Abschlusstext für den Rechnung Du kannst alle Positionsdetails mit einem Klick auf "Alle Details anzeigen" aufklappen oder wieder einklappen. ### Zahlungen Der Zahlungen-Tab zeigt alle Transaktionen, die mit diesem Rechnung verknüpft sind: | Spalte | Beschreibung | | ------------------- | --------------------------------------------------------------------------- | | **Datum** | Datum der Zahlung oder Erstellung der Transaktion | | **Status** | Aktueller Status der Transaktion (z.B. Ausstehend, Bezahlt, Fehlgeschlagen) | | **Zahlungsmethode** | Verwendete Zahlungsmethode (z.B. VISA, SEPA, PayPal) | | **Betrag** | Betrag der Transaktion | | **Beschreibung** | Interne Referenznummer der Transaktion | #### Ausstehende Zahlungen Bei ausstehenden Zahlungen (Status "Ausstehend", "In Bearbeitung" oder "Autorisiert") wird neben dem Betrag ein Info-Symbol angezeigt. Beim Überfahren mit der Maus erscheint ein Tooltip mit dem Hinweis "Dieser Betrag wird in Kürze eingezogen". Falls beim Laden der Zahlungen ein Fehler auftritt, kannst du über den "Erneut versuchen"-Button die Daten neu laden. ### Verlauf Der Verlauf-Tab dokumentiert alle Aktivitäten und Änderungen am Rechnung: * Erstellung und Finalisierung * Statusänderungen * Zahlungseingänge * E-Mail-Versand * Manuelle Notizen und Kommentare Du kannst im Verlauf auch eigene Kommentare hinzufügen, um wichtige Informationen zu dokumentieren. *** ## Seitenleiste Die rechte Seitenleiste zeigt zusätzliche Informationen: ### Rechnungdetails * **Rechnungnummer**: Eindeutige Nummer des Rechnungs * **Rechnungdatum**: Datum der Finalisierung * **Leistungszeitraum**: Zeitraum, auf den sich die Leistung bezieht * **Abonnement**: Verknüpftes Abonnement (falls vorhanden) * **Zahlungsmethode**: Aktuell zugewiesene Zahlungsmethode ### Kundeninformationen * **Kunde**: Name und Kundennummer * **Rechnungsadresse**: Vollständige Rechnungsadresse ### Verknüpfte Rechnunge Bei Gutschriften oder Stornorechnungen werden hier die verknüpften Rechnunge angezeigt: * **Storno-Rechnung**: Verweis auf den stornierten Rechnung * **Original-Rechnung**: Verweis auf die ursprüngliche Rechnung * **Referenz-Rechnung**: Verweis auf referenzierte Rechnunge ### Mahnwesen Der Mahnwesen-Bereich wird nur bei offenen Rechnungen angezeigt. Der Mahnwesen-Bereich zeigt: * Aktuelle Mahnstufe * Status des Mahnwesens (aktiv, pausiert, abgeschlossen) * Möglichkeit zum Pausieren oder Fortsetzen Weitere Details findest du unter [Zahlungsausfälle](/guide/dunning/introduction). *** ## Status-Banner Je nach Status des Rechnungs werden am oberen Rand Banner angezeigt: | Status | Banner | | -------------------- | -------------------------------------------------- | | **Wird finalisiert** | Blauer Info-Banner während der Finalisierung | | **Storniert** | Gelber Warn-Banner mit Hinweis auf Stornierung | | **Geschlossen** | Grauer Banner bei manuell geschlossenen Rechnungen | *** ## Aktionen Über den "Aktionen"-Button in der Kopfzeile stehen dir verschiedene Optionen zur Verfügung: Sendet den Rechnung erneut per E-Mail an den Kunden. Siehe auch: [Rechnung erneut senden](/guide/invoices/introduction#rechnung-erneut-per-e-mail-senden) Ändert die Zahlungsmethode und stößt einen neuen Zahlungseinzug an. Siehe auch: [Zahlung erneut anstoßen](/guide/invoices/introduction#zahlung-erneut-anstossen) Erfasst eine manuelle Zahlung für den Rechnung. Siehe auch: [Zahlung hinzufügen](/guide/invoices/add-payment) Erstellt eine Gutschrift für ausgewählte Positionen. Siehe auch: [Gutschrift erstellen](/guide/invoices/create-credit) Storniert den Rechnung und erstellt automatisch eine Stornorechnung. Siehe auch: [Rechnung stornieren](/guide/invoices/cancel-invoice) Finalisiert den Rechnung und generiert das PDF. Nach der Finalisierung kann der Rechnung nicht mehr bearbeitet werden. Diese Option ist für alle Rechnungtypen (Rechnung, Gutschrift, Storno) im Status "Entwurf" verfügbar. Zeigt eine Vorschau des PDFs an, bevor der Rechnung finalisiert wird. Diese Option ist für alle Rechnungtypen (Rechnung, Gutschrift, Storno) im Status "Entwurf" verfügbar. Schließt den Rechnung und entfernt ihn aus der aktiven Übersicht. Diese Option ist für alle Rechnungtypen (Rechnung, Gutschrift, Storno) im Status "Entwurf" verfügbar. *** ## PDF-Vorschau Bei finalisierten Rechnungen wird das PDF direkt in der Detailansicht angezeigt. Du kannst: * Das PDF vergrößern/verkleinern * Das PDF herunterladen * Zur E-Rechnung wechseln (falls vorhanden) Bei Entwürfen kannst du über den "Vorschau"-Button eine Vorschau des PDFs generieren, um das finale Aussehen zu prüfen. *** ## Häufige Fragen Eine Zahlung kann aus verschiedenen Gründen ausstehend sein: * **Banküberweisung**: Der Kunde muss die Zahlung manuell ausführen * **SEPA-Lastschrift**: Die Abbuchung wird innerhalb der nächsten Tage durchgeführt * **Kreditkarte**: Die Autorisierung wurde erteilt, aber noch nicht eingezogen Der genaue Status wird im Zahlungen-Tab angezeigt. Ein roter "Offen"-Betrag zeigt an, dass der Rechnung noch nicht vollständig bezahlt wurde. Der Betrag entspricht der Differenz zwischen Bruttobetrag und bereits eingegangenen Zahlungen. Sobald der Rechnung vollständig bezahlt ist, wird der "Offen"-Betrag schwarz mit "0,00 €" angezeigt und "Bezahlt" wird grün dargestellt. Nein, der Zahlungen-Tab ist nur bei finalisierten Rechnungen verfügbar. Bei Entwürfen können noch keine Zahlungen eingehen. Klicke auf "Aktionen" > "Zahlungsart ändern" und wähle eine neue Zahlungsmethode aus. Der ausstehende Betrag wird automatisch über die neue Zahlungsmethode eingezogen. # Filter für Rechnungen, Zahlungen und Abos Source: https://docs.fynn.eu/guide/invoices/list-filters Beispiele, wie du die Tabellenfilter in den Rechnungs-, Zahlungs- und Abonnementlisten einsetzt. Auf dieser Seite findest du konkrete Beispiele, wie du die Filter in den Listen für **Rechnungen**, **Zahlungen** und **Abonnements** einsetzen kannst. Eine allgemeine Einführung in Listen und Tabellen (inkl. Spalten, Sortierung und Ansichten) findest du unter\ [Listen und Tabellen](/guide/list-views). ## Textfilter – flexible Suche in Zeichenfeldern Textfilter kannst du z.B. für folgende Felder nutzen: * Rechnungen: * **Belegnummer** * **Kundennummer** * **Kundenname** * **Interne Notiz** * Abonnements: * **Abonummer** * **Name** * **Kundennummer** / **Kundenname** * **PO-Nummer** * Zahlungen: * **Zahlungsnummer** * **Rechnungsnummer** * **Beschreibung** Alle Text‑Filteroperatoren sind **case‑insensitive** – Groß-/Kleinschreibung spielt also keine Rolle. ### Verfügbare Möglichkeiten * **Ist gleich**\ Findet Einträge, bei denen der Text genau übereinstimmt.\ Beispiel: Eine bestimmte Kundennummer oder Belegnummer. * **Enthält**\ Findet Einträge, in denen ein Wort oder Teilwort vorkommt.\ Beispiel: Alle Beschreibungen, in denen „fehlgeschlagen“ vorkommt. * **Ist ungleich**\ Schließt einen bestimmten Text explizit aus.\ Beispiel: Alle Einträge außer einem bestimmten Status oder Namen. * **Enthält nicht**\ Schließt alle Einträge aus, die einen bestimmten Text enthalten.\ Beispiel: Alle internen Notizen ohne das Wort „Test“. * **Ist leer / Ist nicht leer**\ Filtert nach leeren bzw. nicht‑leeren Textfeldern, z.B. „Interne Notiz ist leer“. ## Datumsfilter – vor, nach, an einem Tag Für Datumsfelder wie z.B. **Erstellt am**, **Fällig am**, **Abgebucht am** oder **Nächste Abrechnung** stehen dir folgende Möglichkeiten zur Verfügung: * **Ab einem Datum** – zeigt alle Einträge ab diesem Tag (einschließlich) * **Bis zu einem Datum** – zeigt alle Einträge bis zu diesem Tag (einschließlich) * **Genau an einem Tag** – zeigt nur Einträge, die an diesem Kalendertag liegen * **Zeitraum von/bis** – zeigt Einträge zwischen zwei Daten ### „Genau an einem Tag“ Wenn du „Genau an einem Tag“ auswählst, werden alle Einträge berücksichtigt, deren Datum an diesem Kalendertag liegt – unabhängig von der Uhrzeit. Wir berücksichtigen automatisch die in deinem Mandanten eingestellte Zeitzone, damit die Datumsfilter immer zu deiner Ansicht im System passen. ## Betragsfilter – Betragsbereiche filtern Betragsfelder (z.B. **Bruttobetrag**, **Unbezahlt**, **Netto**, **Gebühren**, **Kontostand**) kannst du nach Bereichen filtern: * **Größer als** * **Größer gleich** * **Kleiner als** * **Kleiner gleich** * **Zwischen zwei Beträgen** Bei Geldbeträgen rechnet die Tabelle im Hintergrund mit der kleinsten Einheit (z.B. Cent), damit Filter und Sortierung exakt und stabil funktionieren. ## Beispiele ### Beispiel 1: Offene Rechnungen eines Kunden im Juli Du möchtest alle **offenen Rechnungen** eines bestimmten Kunden sehen, deren **Fälligkeitsdatum im Juli** liegt. Im visuellen Builder: * Feld: **Status** → Wert: `Unbezahlt` * Feld: **Kunde** → gewünschter Kunde (Kundenfilter) * Feld: **Fällig am** → Operator: `Zwischen` → vom `01.07.2025` bis `31.07.2025` Klicke auf **Anwenden**, um die Liste zu aktualisieren. ### Beispiel 2: Abonnements ohne PO‑Nummer Alle Abos, bei denen noch **keine PO‑Nummer** gepflegt ist: Gehe zu **Abonnements → Abonnements** und klicke auf **Filter**. * Feld: **PO-Nummer** * Operator: `Ist leer` ### Beispiel 3: Zahlungen mit bestimmtem Text in der Beschreibung Du möchtest alle **Zahlungen** finden, in deren **Beschreibung** das Wort „chargeback“ vorkommt: Gehe zu **Abrechnung → Zahlungen** und öffne den Filter. * Feld: **Beschreibung** * Operator: `Enthält` * Wert: `chargeback` ## Ansichten (Presets) speichern Komplexere Filterkombinationen kannst du als **Ansicht** speichern: 1. Filter konfigurieren und anwenden. 2. Im Filter‑Popover **„Als Ansicht speichern“** wählen. 3. Einen Namen vergeben (z.B. „Offene Rechnungen Q3 DE“). Diese Ansicht steht dir dann als Tab über der Tabelle zur Verfügung und kann jederzeit wieder aktiviert, umbenannt oder aktualisiert werden. Views enthalten: * aktive Filter, * sichtbare Spalten und deren Reihenfolge, * sowie die aktuelle Sortierung. # Kundenguthaben Source: https://docs.fynn.eu/guide/invoices/wallet-balance Verstehe, wie das Kundenguthaben funktioniert, automatisch bei Überzahlungen entsteht und auf offene Rechnungen angerechnet wird Das **Kundenguthaben** (auch Wallet Balance genannt) ist ein separates Guthabenkonto, das vorausbezahlte Kredite deiner Kunden verwaltet. Dieses Guthaben kann automatisch auf zukünftige Rechnungen angewendet werden und reduziert den zu zahlenden Betrag. ## Was ist das Kundenguthaben? Das Kundenguthaben funktioniert wie ein "Guthabenkonto" für deine Kunden. Wenn ein Kunde Guthaben hat, bedeutet das: * **Aus Geschäftssicht**: Der Kunde hat vorausbezahltes Guthaben, das er nutzen kann * **Aus buchhalterischer Sicht**: Du schuldest dem Kunden Geld (negativer Debitoren-Saldo) Das Guthaben wird automatisch auf neue Rechnungen angewendet, sodass der Kunde weniger bezahlen muss. ## Wie entsteht Kundenguthaben? Kundenguthaben kann auf verschiedene Weise entstehen: ### Automatische Überzahlungserkennung Wenn ein Kunde eine Rechnung überbezahlt, erkennt Fynn die Differenz automatisch und bucht den überschüssigen Betrag als Guthaben auf das Kundenkonto. Der offene Betrag der Rechnung wird dabei automatisch auf null gesetzt. ``` Beispiel: - Rechnung: 100,00 € - Eingehende Zahlung: 130,00 € - Ergebnis: Rechnung ist bezahlt, 30,00 € werden als Guthaben gutgeschrieben ``` Dieses Verhalten muss in den Einstellungen aktiviert werden (siehe [Einstellungen konfigurieren](#einstellungen-konfigurieren)). Geht nach einer Überzahlung eine weitere Zahlung auf dieselbe Rechnung ein, wird nur der neue Überschuss zusätzlich gutgeschrieben. Fynn verhindert, dass bereits verrechnete Beträge doppelt übertragen werden. ### Gutschrift für zukünftige Rechnungen Wenn du eine Gutschrift erstellst und die Aktion "Gutschrift für zukünftige Rechnungen" wählst, wird der Betrag dem Kundenguthaben hinzugefügt. Mehr dazu unter [Korrigieren](/guide/invoices/invoice-actions). ### Manuelles Guthaben Du kannst einem Kunden manuell Guthaben hinzufügen, z. B. als Entschädigung oder bei einer individuellen Vereinbarung. ## Automatische Anrechnung auf offene Rechnungen Fynn kann vorhandenes Kundenguthaben automatisch auf offene Rechnungen anrechnen. Die Verrechnung erfolgt in einer festen Reihenfolge: Die älteste fällige Rechnung wird zuerst bedient, dann die nächstältere, und so weiter. ``` Beispiel: - Kundenguthaben: 70,00 € - Offene Rechnung A (Fälligkeit: 01.02.): 40,00 € - Offene Rechnung B (Fälligkeit: 15.02.): 60,00 € - Ergebnis: Rechnung A wird vollständig beglichen (40,00 €), 30,00 € werden auf Rechnung B angerechnet (noch 30,00 € offen) ``` Die automatische Anrechnung wird nach jeder Guthabenänderung ausgelöst, etwa wenn eine Überzahlung eingeht oder manuell Guthaben hinzugefügt wird. Die Sortierung der offenen Rechnungen erfolgt nach Fälligkeitsdatum, dann nach Finalisierungsdatum. Bei identischen Daten entscheidet die Rechnungs-ID als letztes Kriterium. ### Anrechnung bei Finalisierung Wenn eine Rechnung finalisiert wird, prüft Fynn ebenfalls, ob der Kunde Guthaben hat. Falls ja, wird das verfügbare Guthaben auf die Rechnung angewendet: ``` Beispiel: - Neue Rechnung: 100,00 € - Kundenguthaben: 30,00 € - Ergebnis: Kunde muss nur noch 70,00 € bezahlen ``` Das Guthaben wird nur bis zur Höhe des Rechnungsbetrags angewendet. Wenn ein Kunde 50,00 € Guthaben hat, aber die Rechnung nur 30,00 € beträgt, werden nur 30,00 € verwendet. Die restlichen 20,00 € bleiben als Guthaben erhalten. ## Einstellungen konfigurieren Zwei Einstellungen steuern das Verhalten des Kundenguthabens. Beide können global unter **Einstellungen > Abrechnung** gesetzt und pro Kunde individuell überschrieben werden. | Einstellung | Beschreibung | Standard | | -------------------------------------------------------- | --------------------------------------------------------------------------------------- | ----------- | | **Überzahlungen als Guthaben verbuchen** | Überschüssige Zahlungsbeträge werden automatisch dem Kundenguthaben gutgeschrieben | Deaktiviert | | **Guthaben automatisch auf offene Rechnungen anrechnen** | Vorhandenes Guthaben wird automatisch auf offene Rechnungen angewendet (älteste zuerst) | Aktiviert | Navigiere zu **Einstellungen > Abrechnung**. Aktiviere oder deaktiviere die gewünschten Optionen im Abschnitt **Kundenguthaben**. Bestätige die Änderungen mit **Speichern**. Navigiere zu **Kunden** und wähle den gewünschten Kunden aus. Klicke auf den Tab **Einstellungen** in der Kundendetailansicht. Passe die Einstellungen im Abschnitt **Abrechnung** an. Die Werte überschreiben die globalen Einstellungen für diesen Kunden. Kundenspezifische Einstellungen haben Vorrang vor den globalen Werten. Wenn du eine Einstellung für einen Kunden individuell setzt, wird der globale Wert für diesen Kunden nicht mehr berücksichtigt. ## Guthaben bei Rechnungsstornierung Wenn eine Rechnung storniert wird, auf die bereits Guthaben angewendet wurde, passiert Folgendes: 1. **Guthaben wird zurückgebucht**: Das verwendete Guthaben wird dem Kunden wieder gutgeschrieben 2. **Vollständige Rückabwicklung**: Die ursprüngliche Guthaben-Transaktion wird durch eine Rückbuchung ausgeglichen 3. **Nachvollziehbarkeit**: Alle Transaktionen bleiben im System erhalten und sind nachvollziehbar (GoBD-konform) Bei einer Stornierung wird das Guthaben immer zurückgebucht, da die Rechnung so behandelt wird, als hätte sie nie existiert. ## Guthaben bei Gutschriften Wenn du eine Gutschrift für eine bereits bezahlte Rechnung erstellst, wird das Guthaben **nicht** automatisch zurückgebucht. Stattdessen hängt es von der gewählten Aktion ab: | Aktion | Guthaben-Impact | | ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | | **Rückerstattung** | Keine Auswirkung auf Guthaben. Die Gutschrift wird als neue Verbindlichkeit behandelt und per Auszahlung beglichen. | | **Betrag anpassen** | Keine Auswirkung auf Guthaben. Die Gutschrift gleicht nur den Debitoren-Saldo aus. | | **Gutschrift für zukünftige Rechnungen** | Der Gutschriftsbetrag wird dem Kundenguthaben hinzugefügt. | Gutschriften sind separate Belege und keine Korrekturen der ursprünglichen Rechnung. Daher wird das ursprünglich verwendete Guthaben nicht zurückgebucht. ## Herkunft der Zahlungsmethode Bei Guthaben, das aus einer Überzahlung stammt, speichert Fynn die ursprüngliche Zahlungsmethode, das verwendete Gateway und die Transaktionsreferenz. Diese Informationen sind relevant, wenn das Guthaben später ausgezahlt werden soll, da Auszahlungen aus regulatorischen Gründen über den gleichen Zahlungsweg erfolgen müssen. ## Guthaben-Transaktionen Jede Bewegung des Kundenguthabens wird als separate Transaktion dokumentiert. Dies gewährleistet: * **Vollständige Nachvollziehbarkeit**: Jede Änderung ist dokumentiert * **GoBD-Konformität**: Alle Transaktionen sind unveränderlich und nachvollziehbar * **Transparenz**: Kunden können ihre Guthaben-Historie einsehen ### Transaktionstypen | Typ | Beschreibung | Betrag | | --------------------------- | ------------------------------------------ | ------- | | **Manuelles Guthaben** | Guthaben wurde manuell hinzugefügt | Positiv | | **Auf Rechnung angewendet** | Guthaben wurde für eine Rechnung verwendet | Negativ | | **Rechnung storniert** | Rückbuchung bei Rechnungsstornierung | Positiv | | **Überzahlung** | Kunde hat Rechnung überbezahlt | Positiv | | **Gutschrift gewährt** | Gutschrift wurde als Guthaben gewährt | Positiv | ## Guthaben einsehen Du kannst das aktuelle Guthaben eines Kunden in der Kundenübersicht einsehen. Dort siehst du: * Den aktuellen Guthabenstand * Die Transaktionshistorie * Verknüpfte Rechnungen und Gutschriften Das Guthaben wird pro Währung separat geführt. Ein Kunde kann also beispielsweise 50,00 € in EUR und 30,00 \$ in USD als Guthaben haben. ## Praxisbeispiele Ein Kunde überweist 500,00 € für eine Rechnung über 450,00 €. Fynn erkennt die Überzahlung von 50,00 € und bucht sie automatisch als Guthaben. Die nächste Rechnung des Kunden wird um 50,00 € reduziert, sofern die automatische Anrechnung aktiviert ist. Ein Kunde hat 200,00 € Guthaben und drei offene Rechnungen: 80,00 € (fällig 01.03.), 150,00 € (fällig 15.03.) und 50,00 € (fällig 31.03.). Fynn verrechnet zuerst die 80,00 €-Rechnung vollständig, dann werden 120,00 € auf die 150,00 €-Rechnung angerechnet. Die dritte Rechnung bleibt unberührt, da kein Guthaben mehr verfügbar ist. Wenn die Einstellung "Überzahlungen als Guthaben verbuchen" deaktiviert ist, wird eine Überzahlung nicht automatisch ins Guthaben übertragen. Der überzahlte Betrag bleibt als Differenz bestehen und muss manuell verarbeitet werden. Global ist die automatische Anrechnung aktiviert, aber für einen bestimmten Kunden wurde sie deaktiviert. Guthaben, das bei diesem Kunden entsteht, wird nicht automatisch auf seine offenen Rechnungen angerechnet. Es bleibt stattdessen im Wallet stehen, bis du es manuell zuweist oder der Kunde eine neue Rechnung erhält, auf die es bei Finalisierung angewendet wird. ## Häufige Fragen Nein. Das System verhindert, dass das Guthaben negativ wird. Wenn Guthaben auf eine Rechnung angewendet wird, wird nur so viel verwendet, wie verfügbar ist. Das verwendete Guthaben wird automatisch zurückgebucht. Der Kunde erhält sein Guthaben zurück. Ja, du kannst Guthaben manuell anpassen. Dies sollte jedoch nur in Ausnahmefällen erfolgen und wird im Verlaufsprotokoll dokumentiert. Der **Debitoren-Saldo** zeigt die gesamte Forderungsposition (Rechnungen minus Zahlungen minus Gutschriften). Das **Kundenguthaben** zeigt nur das verfügbare Guthaben, das auf zukünftige Rechnungen angewendet werden kann. Wenn ein Kunde Guthaben hat, sollte der Debitoren-Saldo negativ sein, und dieser Betrag sollte dem Guthaben entsprechen. Nein. Fynn vergleicht bei jeder Zahlung den bereits übertragenen Betrag mit dem aktuellen Überschuss und bucht nur die Differenz. So wird sichergestellt, dass keine doppelten Gutschriften entstehen. Prüfe, ob die Einstellung "Überzahlungen als Guthaben verbuchen" aktiviert ist. Diese findest du unter **Einstellungen > Abrechnung** oder in den individuellen Kundeneinstellungen. Standardmäßig ist sie deaktiviert. # Guthaben auszahlen Source: https://docs.fynn.eu/guide/invoices/wallet-payout Zahle Kundenguthaben per SEPA-Überweisung auf das Bankkonto des Kunden aus, mit Herkunftsprüfung und automatischer Rückbuchung bei Fehlern Mit einer **Guthaben-Auszahlung** überweist du das Kundenguthaben zurück auf das Bankkonto des Kunden. Fynn erstellt dafür eine SEPA-Überweisung. Das Guthaben wird beim Anstoßen der Auszahlung sofort abgezogen und erst dann endgültig verbucht, wenn die Bank die Überweisung ausgeführt hat. Wie die Überweisung zur Bank gelangt, hängt vom eingestellten Einreichungs-Modus ab: im **manuellen Modus** (Standard) lädst du die SEPA-Datei selbst herunter und reichst sie bei deiner Bank ein, im **automatischen Modus** wird sie über EBICS eingereicht. Den Modus stellst du in den SEPA-Lastschrift-Einstellungen ein. ## Wann eine Auszahlung sinnvoll ist Kundenguthaben entsteht zum Beispiel durch Überzahlungen oder eine [Aufladung](/guide/invoices/wallet-top-up). Normalerweise wird es automatisch auf die nächsten Rechnungen angerechnet (siehe [Kundenguthaben](/guide/invoices/wallet-balance)). Möchte der Kunde sein Guthaben stattdessen zurückerhalten, zahlst du es aus. Eine Auszahlung ist keine Gutschrift und keine Rechnungskorrektur. Sie bewegt nur bestehendes Guthaben zurück auf das Bankkonto des Kunden. Für die Erstattung einer bezahlten Rechnung nutzt du die Rechnungsaktion **Rückerstattung** (siehe [Rechnungsaktionen](/guide/invoices/invoice-actions)). ## Voraussetzungen Damit du Guthaben per Überweisung auszahlen kannst, müssen diese Dinge eingerichtet sein: | Voraussetzung | Beschreibung | | ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **SEPA-XML-Einstellungen** | Das Absender-Bankkonto (IBAN, BIC und Kontoinhaber) ist unter den SEPA-Lastschrift-Einstellungen hinterlegt. Von diesem Konto wird die Überweisung ausgeführt. Diese Angaben sind in beiden Modi nötig. | | **Bankverbindung des Kunden** | Für den Kunden ist eine Bankverbindung hinterlegt (SEPA-Mandat oder Zahlungsmethode per Überweisung). Alternativ gibst du die Empfänger-IBAN direkt beim Anstoßen der Auszahlung an. | | **EBICS-Anbindung** | Nur für den automatischen Modus: Deine Organisation ist über EBICS mit der Bank verbunden, über die die Überweisung eingereicht wird. Im manuellen Modus ist EBICS nicht erforderlich. | Fehlt eine erforderliche Voraussetzung, wird die Auszahlung nicht angestoßen und das Guthaben bleibt unverändert. Fynn gibt in diesem Fall eine klare Fehlermeldung aus, statt eine Buchung anzulegen, die später fehlschlägt. ## Woher das Guthaben stammt entscheidet über den Weg Aus regulatorischen Gründen (Geldwäsche-Prävention) darf Guthaben nur über den Weg zurückfließen, über den es hereingekommen ist. Eine Bankauszahlung ist deshalb nur erlaubt, wenn das Guthaben ursprünglich per Banküberweisung oder SEPA-Lastschrift entstanden ist. Fynn merkt sich für jede Guthaben-Gutschrift, aus welcher Zahlung sie stammt, und prüft das bei jeder Auszahlung. | Herkunft des Guthabens | Bankauszahlung möglich? | Richtiger Weg | | ----------------------------- | ----------------------- | ------------------------------------------------------------------- | | Banküberweisung | Ja | Auszahlung per SEPA-Überweisung | | SEPA-Lastschrift | Ja | Auszahlung per SEPA-Überweisung | | Kartenzahlung (Stripe, Unzer) | Nein | Erstattung über den ursprünglichen Zahlungsweg zurück auf die Karte | | PayPal | Nein | Erstattung über PayPal | | GoCardless | Nein | Erstattung über GoCardless | | Unbekannte Herkunft | Nein | Manuelle Prüfung nötig, dann Erstattung über den ursprünglichen Weg | Setzt sich das Guthaben aus mehreren Zahlungen zusammen, ist eine Bankauszahlung nur möglich, wenn **jeder** verrechnete Anteil aus einer erlaubten Herkunft stammt. Ein einziger gesperrter Anteil verhindert die gesamte Auszahlung. So bleibt jeder Cent eindeutig einem Zufluss zugeordnet. Wird eine Auszahlung wegen der Herkunft abgelehnt, wird nichts gebucht und das Guthaben bleibt vollständig erhalten. Du erstattest den Betrag dann über den ursprünglichen Zahlungsweg oder triffst nach einer manuellen Prüfung eine dokumentierte Entscheidung. ## Ablauf und Status Jede Auszahlung durchläuft feste Schritte. Solange sie nicht abgeschlossen ist, kannst du den aktuellen Stand am Status ablesen. | Status | Bedeutung | | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------- | | **Offen** | Die Auszahlung ist angelegt und das Guthaben ist bereits vom Konto des Kunden abgezogen. Sie wartet auf die Einreichung bei der Bank. | | **Eingereicht** | Die SEPA-Überweisung wurde bei der Bank eingereicht und wird von ihr verarbeitet. | | **Ausgeführt** | Die Bank hat die Überweisung ausgeführt und über den Kontoumsatz bestätigt. Die Auszahlung ist abgeschlossen. | | **Fehlgeschlagen** | Die Einreichung ist fehlgeschlagen. Das Guthaben wurde automatisch wieder gutgeschrieben. | ### Manueller Modus (Standard) Du gibst den Betrag an und optional eine abweichende Empfänger-Bankverbindung. Ohne Angabe verwendet Fynn die hinterlegte Bankverbindung des Kunden. Fynn prüft das verfügbare Guthaben und die Herkunft, zieht den Betrag sofort vom Guthaben ab und legt die Auszahlung mit Status **Offen** an. Auf der Seite **Auszahlungen** erstellst du mit einem Klick die SEPA-Datei für alle offenen Auszahlungen und lädst sie herunter. Du reichst die heruntergeladene SEPA-Datei über das Online-Banking deiner Bank ein. Auf der Seite **SEPA-Exporte** markierst du die Datei als hochgeladen. Die enthaltenen Auszahlungen wechseln damit auf **Eingereicht**. Sobald der Kontoumsatz die Überweisung bestätigt, wechselt die Auszahlung auf **Ausgeführt**. ### Automatischer Modus Ist der automatische Modus in den SEPA-Lastschrift-Einstellungen aktiviert, übernimmt Fynn die Einreichung selbst. Wie im manuellen Modus: Betrag und optional eine abweichende Bankverbindung. Der Betrag wird sofort vom Guthaben abgezogen. Fynn erstellt die SEPA-Überweisung und reicht sie über EBICS bei deiner Bank ein. Die Auszahlung wechselt auf **Eingereicht**. Sobald der Kontoumsatz die Überweisung bestätigt, wechselt die Auszahlung auf **Ausgeführt**. ## Was bei einem Fehler passiert Im automatischen Modus bucht Fynn den abgezogenen Betrag automatisch wieder zurück, falls die Einreichung über EBICS fehlschlägt. Das Guthaben entspricht danach genau dem Stand vor der Auszahlung. Die Auszahlung erhält den Status **Fehlgeschlagen** und einen Grund. Im manuellen Modus bleibt eine Auszahlung so lange **Offen**, bis du den Upload auf der Seite SEPA-Exporte bestätigst. Solange du die Datei nicht als hochgeladen markierst, ist noch nichts endgültig, und das abgezogene Guthaben ist weiterhin dieser offenen Auszahlung zugeordnet. Es wird nie ein Betrag ohne Deckung ausgezahlt: Entweder die Überweisung ist eingereicht (Status **Eingereicht**), die Auszahlung wartet noch als **Offen** auf die Einreichung, oder das Guthaben ist vollständig zurückgebucht (Status **Fehlgeschlagen**). ## Nachvollziehbarkeit Jede Auszahlung dokumentiert, aus welchen Zuflüssen sie stammt, welche Empfänger-Bankverbindung verwendet wurde und über welche Referenz sie im Kontoumsatz wiederzufinden ist. Damit lässt sich für jeden ausgezahlten Betrag lückenlos belegen, woher das Guthaben kam und wohin es geflossen ist. ## Häufige Fragen Ja. Du kannst beim Anstoßen der Auszahlung eine abweichende Empfänger-IBAN angeben. Sie wird auf der Auszahlung dokumentiert. Ohne Angabe verwendet Fynn die hinterlegte Bankverbindung des Kunden. Das Guthaben stammt ganz oder teilweise aus einer Zahlung, die nicht per Überweisung zurückfließen darf, zum Beispiel aus einer Kartenzahlung oder über PayPal. Erstatte den Betrag in diesem Fall über den ursprünglichen Zahlungsweg. Nein. Schlägt die Einreichung fehl, wird der abgezogene Betrag automatisch wieder gutgeschrieben. Das Guthaben entspricht danach wieder dem Stand vor der Auszahlung. Die Auszahlung wird abgelehnt und es wird nichts gebucht. Das Guthaben kann durch eine Auszahlung nie negativ werden. Nein. Es lässt sich höchstens der aktuell verfügbare Guthabenstand in der jeweiligen Währung auszahlen. ## Verwandte Themen Wie Guthaben entsteht und automatisch auf Rechnungen angerechnet wird. Guthaben manuell oder automatisch per Zahlungseinzug auffüllen. # Wallet aufladen Source: https://docs.fynn.eu/guide/invoices/wallet-top-up Lade das Kundenguthaben manuell oder automatisch auf, um Rechnungen vorab zu bezahlen Mit der **Wallet-Aufladung** können Kunden ihr Guthaben gezielt auffüllen — entweder manuell über die Web-App oder automatisch per Regel, wenn das Guthaben unter einen bestimmten Schwellenwert fällt. ## Manuelle Aufladung Eine manuelle Aufladung startet einen Zahlungsvorgang, der den gewünschten Betrag vom Kunden einzieht und als Guthaben verbucht. Navigiere zu **Kunden** und wähle den gewünschten Kunden aus. Klicke auf den Tab **Debitorenkonto** in der Kundendetailansicht. Klicke auf den Button **Aufladen** in der Wallet-Guthaben-Karte. Gib den gewünschten Aufladebetrag ein. Optional kannst du eine bestimmte Zahlungsmethode auswählen — andernfalls wird die Standard-Zahlungsmethode des Kunden verwendet. Klicke auf **Aufladen**. Fynn erstellt einen Zahlungsvorgang (PaymentIntent), der den Betrag einzieht. ```bash theme={null} curl -X POST https://coreapi.io/api/wallet/top-up \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_API_KEY" \ -d '{ "customerId": "CUSTOMER_ID", "amount": 100.00, "currencyCode": "EUR" }' ``` Siehe [API-Dokumentation](/api-reference/guides/wallet-top-up) für alle Parameter und Optionen. ### Status einer Aufladung Jede Aufladung durchläuft einen Zahlungsstatus: | Status | Beschreibung | Badge | | ------------------ | ------------------------------------------------------ | ----- | | **Ausstehend** | Zahlung wurde gestartet, aber noch nicht abgeschlossen | Gelb | | **Abgeschlossen** | Zahlung war erfolgreich, Guthaben wurde gutgeschrieben | Grün | | **Fehlgeschlagen** | Zahlung konnte nicht eingezogen werden | Rot | Nach einer erfolgreichen Aufladung wird das Guthaben sofort verfügbar und kann automatisch auf offene Rechnungen angerechnet werden, sofern die [automatische Anrechnung](/guide/invoices/wallet-balance#automatische-anrechnung-auf-offene-rechnungen) aktiviert ist. ### Aufladungshistorie Im Debitorenkonto-Tab findest du die Karte **Aufladungen** mit einer Übersicht aller bisherigen Aufladungen — inklusive angefordertem Betrag, gutgeschriebenem Betrag und Status. ## Automatische Aufladung Mit automatischen Aufladungsregeln lässt sich das Guthaben eines Kunden automatisch auffüllen, wenn es unter einen definierten Schwellenwert fällt. ### Regel erstellen Navigiere zum Tab **Debitorenkonto** des gewünschten Kunden. Klicke in der Karte **Automatische Aufladung** auf **Regel hinzufügen**. Konfiguriere die Regel: | Parameter | Beschreibung | | ------------------- | ------------------------------------------------------------------------------------- | | **Währung** | Die Währung, für die die Regel gilt (z.B. EUR) | | **Schwellenwert** | Wenn das Guthaben unter diesen Betrag fällt, wird aufgeladen | | **Aufladebetrag** | Der Betrag, der automatisch aufgeladen wird | | **Zahlungsmethode** | Optional: Spezifische Zahlungsmethode (Standard: Standard-Zahlungsmethode des Kunden) | Klicke auf **Erstellen**. Die Regel ist sofort aktiv. Pro Kunde und Währung kann jeweils nur eine automatische Aufladungsregel existieren. ### Wie funktioniert die automatische Aufladung? 1. **Trigger**: Bei jeder Guthaben-Abbuchung (z.B. Anrechnung auf eine Rechnung) prüft Fynn, ob das Guthaben unter den Schwellenwert gefallen ist 2. **Aufladung starten**: Falls ja, wird automatisch eine Aufladung über den konfigurierten Betrag gestartet 3. **Zahlung einziehen**: Der Betrag wird über die konfigurierte (oder Standard-) Zahlungsmethode eingezogen 4. **Guthaben gutschreiben**: Nach erfolgreicher Zahlung wird das Guthaben aufgeladen ``` Beispiel: - Schwellenwert: 10,00 € - Aufladebetrag: 100,00 € - Aktuelles Guthaben: 50,00 € - Neue Rechnung: 45,00 € (Guthaben wird angerechnet) - Guthaben danach: 5,00 € → unter Schwellenwert! - Automatische Aufladung: 100,00 € wird eingezogen - Guthaben nach Aufladung: 105,00 € ``` ### Regeln verwalten In der Karte **Automatische Aufladung** kannst du bestehende Regeln: * **Aktivieren/Deaktivieren**: Regel vorübergehend ein- oder ausschalten * **Bearbeiten**: Schwellenwert, Betrag oder Zahlungsmethode ändern * **Löschen**: Regel dauerhaft entfernen ### Sicherheitsmechanismen Fynn schützt vor ungewollten Mehrfach-Aufladungen: * **Aufladung durch Aufladung wird nicht getriggert**: Eine Guthaben-Aufladung (Top-Up) löst keine erneute Schwellenwert-Prüfung aus * **Fehlerzähler**: Nach aufeinanderfolgenden fehlgeschlagenen Aufladungen wird eine Warnung angezeigt. So erkennst du frühzeitig, wenn eine Zahlungsmethode nicht mehr funktioniert * **Feature-Flag**: Die Wallet-Aufladung muss für deinen Account aktiviert sein Wenn die Zahlungsmethode eines Kunden nicht mehr gültig ist (z.B. abgelaufene Kreditkarte), schlägt die automatische Aufladung fehl. Prüfe regelmäßig Regeln mit Fehlerwarnungen. ## Häufige Fragen Ja. Neben der Aufladung per Zahlungseinzug kannst du auch manuell Guthaben hinzufügen — z.B. über eine Gutschrift oder manuelle Buchung. Die Aufladung unterscheidet sich dadurch, dass sie automatisch eine Zahlung vom Kunden einzieht. Die Aufladung wird als **Fehlgeschlagen** markiert. Das Guthaben bleibt unverändert. Bei automatischen Aufladungen wird der Fehlerzähler erhöht, und bei der nächsten Guthaben-Abbuchung wird erneut versucht aufzuladen. Ja. Du kannst pro Währung eine automatische Aufladungsregel erstellen. So lassen sich z.B. EUR- und USD-Guthaben mit unterschiedlichen Schwellenwerten verwalten. Die Aufladung wird sofort ausgelöst, sobald das Guthaben unter den Schwellenwert fällt. Die tatsächliche Gutschrift erfolgt, sobald die Zahlung erfolgreich eingezogen wurde. Ja. Du kannst eine Regel deaktivieren, ohne sie zu löschen. Die Regel bleibt gespeichert und kann jederzeit wieder aktiviert werden. # Listen und Tabellen Source: https://docs.fynn.eu/guide/list-views So arbeitest du mit Listenansichten in Fynn – filtern, sortieren und anpassen. Auf dieser Seite erfährst du, wie du: * Filter verwendest, um Einträge schnell einzugrenzen * Spalten ein- und ausblendest * Sortierungen anpasst * Ansichten speicherst und wiederverwendest ## Filter verwenden Mit den Tabellenfiltern kannst du große Listen schnell eingrenzen. 1. Öffne die gewünschte Liste. 2. Klicke oben rechts in der Tabellenleiste auf **Filter**. 3. Im Popover kannst du: * im **visuellen Modus** Filterregeln zusammenklicken * oder über die **Textsuche** eine einfache Suchzeile eingeben (optional). [Ausführliche Beispiele zu Filtern findest du hier](/guide/invoices/list-filters). ## Spalten anpassen Du kannst in vielen Listen selbst bestimmen, welche Spalten angezeigt werden. 1. Öffne die gewünschte Liste. 2. Klicke in der Tabellenleiste auf **Spalten** (oder das Spalten‑Symbol). 3. Wähle aus, welche Spalten sichtbar sein sollen. 4. Ziehe Spalten in der Tabelle per Drag & Drop an die gewünschte Position (sofern verfügbar). Deine Einstellungen werden in der Regel pro Benutzer gespeichert, sodass du mit deiner bevorzugten Ansicht weiterarbeiten kannst. ## Sortierung anpassen Um die Sortierung zu ändern: 1. Klicke auf die Spaltenüberschrift, nach der du sortieren möchtest (z.B. **Erstellt am**, **Fällig am**, **Betrag**). 2. Ein erneuter Klick kehrt die Sortierreihenfolge (aufsteigend/absteigend) um. In manchen Listen kannst du zusätzlich eine Standardsortierung pro gespeicherter Ansicht festlegen. ## Ansichten speichern Komplexere Kombinationen aus: * Filtern, * sichtbaren Spalten, * deren Reihenfolge, * und Sortierung kannst du als **Ansicht** speichern. 1. Stelle die Liste so ein, wie du sie benötigst. 2. Öffne das Menü für Ansichten (z.B. oben über der Tabelle). 3. Wähle **„Als Ansicht speichern“**. 4. Vergib einen Namen (z.B. „Offene Rechnungen Q3 DE“). Die gespeicherte Ansicht steht dir anschließend als Tab oder Eintrag in der Auswahlliste zur Verfügung und kann jederzeit wieder ausgewählt, umbenannt oder aktualisiert werden. # Eigene E-Mail-Domain Source: https://docs.fynn.eu/guide/notifications/custom-email-domain Richte deine eigene Domain als E-Mail-Absender ein, um E-Mails direkt über deine Unternehmens-Domain zu versenden. ## Voraussetzungen Um E-Mails über deine eigene Domain zu versenden, muss die Domain zunächst vom Fynn-Team eingerichtet werden. Schreibe uns eine kurze E-Mail an [hi@fynn.eu](mailto:hi@fynn.eu) mit der gewünschten Domain. Nachdem das Fynn-Team deine Domain eingerichtet hat, musst du zwei Schritte durchführen: 1. **Domain-Verifizierung** - Bestätige, dass du der Inhaber der Domain bist 2. **DNS-Konfiguration** - Richte SPF, DKIM und optionale Einträge ein, um eine zuverlässige Zustellung sicherzustellen *** ## Schritt 1: Domain verifizieren Um zu bestätigen, dass du Inhaber der Domain bist, muss ein TXT-Record in deinen DNS-Einstellungen hinterlegt werden. Nachdem das Fynn-Team deine Domain angelegt hat, erhältst du einen Verifizierungscode. Dieser sieht beispielsweise so aus: | Typ | Name | Wert | | --- | ----------------- | -------------------------------------------- | | TXT | `@` (Root-Domain) | `postal-verification deinVerifizierungsCode` | Melde dich bei deinem DNS-Provider an (z.B. Cloudflare, IONOS, Hetzner, AWS Route 53) und erstelle einen neuen **TXT-Record** mit den erhaltenen Daten. Klicke in der Verwaltungsoberfläche auf **"Verify TXT record"**, um die Verifizierung zu starten. Der DNS-Eintrag wird geprüft und die Domain bestätigt. DNS-Änderungen können bis zu 24 Stunden dauern, bis sie weltweit verfügbar sind. In der Regel ist der Eintrag jedoch innerhalb weniger Minuten sichtbar. *** ## Schritt 2: DNS-Konfiguration Nach erfolgreicher Verifizierung müssen weitere DNS-Einträge konfiguriert werden, um eine zuverlässige E-Mail-Zustellung sicherzustellen. ### SPF-Record (erforderlich) Der SPF-Record legt fest, welche Server E-Mails im Namen deiner Domain versenden dürfen. Erstelle einen **TXT-Record** auf der Root-Domain (`@`) mit folgendem Inhalt: ``` v=spf1 a mx include:spf.pes.netzfabrik.eu ~all ``` Falls du bereits einen SPF-Record hast (z.B. für einen anderen E-Mail-Dienst), füge lediglich `include:spf.pes.netzfabrik.eu` zu deinem bestehenden Record hinzu. Es darf pro Domain nur **einen** SPF-Record geben. **Beispiel:** Dein bestehender Record `v=spf1 include:_spf.google.com ~all` wird zu: ``` v=spf1 include:_spf.google.com include:spf.pes.netzfabrik.eu ~all ``` ### DKIM-Record (erforderlich) DKIM signiert ausgehende E-Mails kryptografisch und stellt sicher, dass sie nicht manipuliert wurden. Erstelle einen **TXT-Record** mit dem Namen und Inhalt, die du vom Fynn-Team erhältst. Der Eintrag sieht beispielsweise so aus: | Typ | Name | Wert | | --- | ------------------------- | ------------------------------------------ | | TXT | `postal-XXXXX._domainkey` | `v=DKIM1; t=s; h=sha256; p=MIGfMA0GCSq...` | Der genaue Name und Wert des DKIM-Records wird individuell für deine Domain generiert und in der Verwaltungsoberfläche angezeigt. ### Return Path (empfohlen) Der Return Path verbessert die Zustellbarkeit und hilft bei der DMARC-Ausrichtung. Erstelle einen **CNAME-Record**: | Typ | Name | Wert | | ----- | ------ | ---------------------- | | CNAME | `psrp` | `rp.pes.netzfabrik.eu` | ### MX-Records (optional) MX-Records sind nur erforderlich, wenn du auch **eingehende** E-Mails über Fynn empfangen möchtest. Für den reinen Versand von Benachrichtigungen sind sie nicht notwendig. Falls gewünscht, erstelle einen **MX-Record** mit Priorität 10: | Typ | Priorität | Wert | | --- | --------- | ---------------------- | | MX | 10 | `mx.pes.netzfabrik.eu` | *** ## DNS-Einträge prüfen Nachdem du alle DNS-Einträge konfiguriert hast, kannst du in der Verwaltungsoberfläche über **"Check my records are correct"** prüfen, ob alle Einträge korrekt gesetzt sind. Für jeden Eintrag wird der aktuelle Status angezeigt. # Übersicht-E-Mails (Digest) Source: https://docs.fynn.eu/guide/notifications/digest-emails Erhalte regelmäßige Zusammenfassungen mit den wichtigsten Kennzahlen und Aufgaben deiner Organisation. ## Übersicht Übersicht-E-Mails (Digest) fassen die wichtigsten Kennzahlen und offenen Aufgaben deiner Organisation in einer einzigen E-Mail zusammen. Du erhältst damit einen kompakten Überblick, ohne dich in die Plattform einloggen zu müssen. Jeder Benutzer kann individuell festlegen, welche Informationen er erhalten möchte und in welchem Rhythmus die E-Mails versendet werden. ## Benutzerkontobereich Die Einstellungen für Übersicht-E-Mails befinden sich im persönlichen Benutzerkontobereich. Dort kannst du dein Profil verwalten und deine Benachrichtigungseinstellungen konfigurieren. ### Benachrichtigungen konfigurieren Klicke auf deinen Avatar oder Namen in der oberen Navigation und wähle **Mein Profil**. Wähle den Tab **Benachrichtigungen** in der linken Seitennavigation. Benachrichtigungseinstellungen im Benutzerkontobereich Aktiviere den Hauptschalter **Übersicht-E-Mails**, um regelmäßige Zusammenfassungen zu erhalten. Wenn der Schalter deaktiviert ist, werden keine Digest-E-Mails versendet. Wähle für jeden verfügbaren Abschnitt die gewünschte Frequenz: * **Täglich** — Du erhältst den Abschnitt in täglichen E-Mails (Montag bis Freitag) * **Wöchentlich** — Du erhältst den Abschnitt einmal pro Woche * **Deaktiviert** — Der Abschnitt wird nicht in deine E-Mails aufgenommen Welche Abschnitte dir zur Verfügung stehen, hängt von deinen Berechtigungen ab. Du siehst nur Abschnitte, für die deine Benutzerrolle die erforderlichen Rechte hat. Ändert sich deine Rolle, werden die verfügbaren Abschnitte automatisch angepasst. ## Verfügbare Abschnitte Die Abschnitte sind in Kategorien gruppiert. Jeder Abschnitt kann einzeln aktiviert oder deaktiviert werden. ### Kunden & Umsatz Verfolge das Kundenwachstum und erkenne Trends in der Neukundengewinnung. Zeigt die Anzahl neuer Kunden im gewählten Zeitraum. Erhalte einen Überblick über die Umsatzentwicklung und Veränderungen zum Vorperioden-Vergleich. ### Rechnungen & Zahlungen Erhalte eine Übersicht über Rechnungen, die noch auf Prüfung und Freigabe warten. Behalte ausstehende Lastschrift-Exporte im Blick, damit keine Zahlungseingänge verzögert werden. Behalte eingehende Zahlungen im Blick, die noch manuell einer Rechnung zugeordnet werden müssen. Die Benachrichtigung über ausstehende SEPA-XML-Exporte wird jetzt über die Übersicht-E-Mails gesteuert und kann individuell pro Benutzer konfiguriert werden. Bisher wurde diese Information systemseitig versendet. ### Buchhaltung Werde informiert, sobald ein Monat für den Monatsabschluss bereit ist. ### Betrieb Erkenne Zustellprobleme frühzeitig und verhindere, dass wichtige Kommunikation verloren geht. Erhalte einen Überblick über alle Xentral-Bestellungen und deren Status. Werde über fehlgeschlagene Xentral-Bestellungen informiert, die deine Aufmerksamkeit erfordern. Die Xentral-Abschnitte sind nur sichtbar, wenn die Xentral-Integration für deinen Mandanten aktiviert ist. ## Frequenz & Zustellung ### Tägliche E-Mails * Versand an jedem Werktag (Montag bis Freitag) * Enthält die Daten der letzten 24 Stunden * Vergleich mit dem Vortag ### Wöchentliche E-Mails * Versand immer montags * Enthält die Daten der letzten 7 Tage * Vergleich mit der Vorwoche Wenn du sowohl tägliche als auch wöchentliche Abschnitte aktiviert hast, erhältst du am Montag eine kombinierte E-Mail mit allen Abschnitten — statt zwei separater E-Mails. ### Leere Zeiträume Wenn in einem Zeitraum keine relevanten Daten vorliegen (z.B. keine neuen Kunden, keine offenen Rechnungen), wird keine E-Mail versendet. Du erhältst nur dann eine E-Mail, wenn mindestens ein aktivierter Abschnitt Daten enthält. ## Häufige Fragen Die verfügbaren Abschnitte richten sich nach deinen Benutzerberechtigungen. Du siehst nur Abschnitte, für die deine Rolle die erforderlichen Rechte hat. Wende dich an einen Administrator, wenn du Zugriff auf weitere Abschnitte benötigst. Der Versandzeitpunkt wird systemseitig festgelegt. Wöchentliche E-Mails werden immer montags versendet. Änderungen an deiner Benutzerrolle wirken sich automatisch auf die verfügbaren Abschnitte aus. Wird ein Recht entzogen, wird der zugehörige Abschnitt ab der nächsten E-Mail nicht mehr angezeigt. Neue Rechte werden ebenfalls automatisch berücksichtigt. E-Mails werden nur versendet, wenn mindestens ein aktivierter Abschnitt Daten enthält. Prüfe, ob der Hauptschalter aktiviert ist und ob mindestens ein Abschnitt auf „Täglich" oder „Wöchentlich" steht. Die Benachrichtigung über ausstehende SEPA-XML-Exporte ist jetzt Teil der Übersicht-E-Mails. Du kannst sie im Benutzerkontobereich unter „Benachrichtigungen" individuell konfigurieren. # Benachrichtigungen Source: https://docs.fynn.eu/guide/notifications/introduction Konfiguriere Benachrichtigungen und E-Mails. Einstellungen der Benachrichtungen Fynn bietet eine Reihe von Benachrichtigungen, die du anpassen kannst, um über wichtige Ereignisse in deiner Organisation informiert zu werden. Diese Benachrichtigungen können per E-Mail oder über andere Kanäle gesendet werden. ## Mehrsprachige E-Mail-Benachrichtigungen E-Mail-Benachrichtigungen sind in **Deutsch und Englisch** verfügbar. Die Sprache wird automatisch anhand des Kundenprofils bestimmt. Fynn unterstützt mehrsprachige E-Mail-Vorlagen. Jede Benachrichtigung kann eine separate deutsche und englische Vorlage haben, die unabhängig voneinander bearbeitet und versioniert werden. **So funktioniert es:** * Kunden erhalten E-Mails automatisch in der Sprache, die in ihrem Profil hinterlegt ist (Feld "Sprache") * Im Vorlagen-Editor kannst du über **Sprachreiter** zwischen der deutschen und englischen Version wechseln * Mit der integrierten **KI-Übersetzung** kannst du die deutsche Vorlage per Klick ins Englische übersetzen lassen * Die generierte Übersetzung kann vor dem Speichern überprüft und angepasst werden * Auch der **globale E-Mail-Header und Footer** können pro Sprache konfiguriert werden * Systemtexte (z.B. "Geschäftsführer", "E-Mail im Browser öffnen") werden automatisch in der Kundensprache dargestellt Ist für eine Benachrichtigung keine englische Vorlage konfiguriert, wird automatisch die deutsche Version verwendet. Du kannst englische Vorlagen also schrittweise hinzufügen. ## Benachrichtigungen konfigurieren Um Benachrichtigungen zu konfigurieren, gehe zu den [Einstellungen > Benachrichtigungen](https://app.fynn.eu/settings/notifications). Hier kannst du die verschiedenen verfügbaren Benachrichtigungen einsehen und anpassen. Für jede Benachrichtigung kannst du festlegen, ob sie aktiviert ist und welche Vorlage verwendet wird. ### Benachrichtigungen anpassen Einstellungen der Benachrichtungen Die E-Mail Vorlagen sind im MJML Format verfasst, welches eine einfache Möglichkeit bietet, responsive E-Mails zu erstellen. Du kannst die Vorlagen anpassen, um den Stil und Inhalt der E-Mails zu ändern, die an deine Nutzer gesendet werden. Die Vorlagen enthalten Platzhalter, die automatisch durch die entsprechenden Informationen ersetzt werden, wenn die E-Mail gesendet wird. Diese Platzhalter sind in geschweifte Klammern eingeschlossen, z.B. `{{ invoice.number }}` für den die Rechnungsnummer. Eine genaue Liste der verfügbaren Platzhalter steht aktuell nicht zur Verfügung, aber du kannst die Vorlagen direkt in der Fynn App anpassen und testen. ### Variablen in E-Mail-Vorlagen ## Eigener E-Mail-Absender Du kannst E-Mails über deine eigene Domain versenden. Eine ausführliche Anleitung zur Einrichtung findest du unter [Eigene E-Mail-Domain](/guide/notifications/custom-email-domain). Der SMS-Versand ist ein kostenpflichtiges Feature, jede SMS (160 Zeichen) kostet 0,10 EUR (zzgl. MwSt.). ### Benachrichtigungen anpassen Einstellungen der Benachrichtungen für SMS Das SMS Format ist ein einfacher Text, der an die Nutzer gesendet wird. Du kannst die Vorlagen anpassen, um den Stil und Inhalt der SMS zu ändern, die an deine Nutzer gesendet werden. Mit dem Klick auf "Einstellungen speichern" wird das SMS-Template bzw. Änderungen gespeichert. Um diese Funktion zu nutzen, muss sie von unserem Team aktiviert werden. Schreibe uns eine kurze E-Mail mit dem Wunsch an [hi@fynn.eu](mailto:hi@fynn.eu) Fynn bietet die Möglichkeit, Benachrichtigungen per Brief zu versenden. Diese Funktion ist besonders nützlich für wichtige Mitteilungen, die nicht elektronisch zugestellt werden können oder sollen. Briefe bis 14 Uhr werden noch am selben Tag gedruckt und versendet. Briefe, die nach 14 Uhr erstellt werden, werden am nächsten Werktag gedruckt und versendet. ## Zusätzliche Rechnungs-Empfänger Um diese Funktion zu nutzen, muss sie von unserem Team aktiviert werden. Schreibe uns eine kurze E-Mail mit dem Wunsch an [hi@fynn.eu](mailto:hi@fynn.eu) Zusätzliche Rechnungs-Empfänger Die Funktion "Zusätzliche Rechnungs-Empfänger" ermöglicht es dir, Rechnungen bspw. direkt per E-Mail Upload an dein Buchhaltungssystem zu senden. Als Absender wird die E-Mail-Adresse verwendet, die in den Einstellungen der Organisation hinterlegt ist. Diese muss ggf. in deiner Buchhaltungssoftware vorab freigeschaltet werden. Der Kunde erhält weiterhin eine separate E-Mail mit der Rechnung. Die zusätzlichen Empfänger erhalten die Rechnung ebenfalls, aber ohne den Hinweis, dass es sich um eine Kopie handelt. # Postversand (Briefe) Source: https://docs.fynn.eu/guide/notifications/postversand Versende Rechnungen als physischen Brief, mit automatischem Fallback von E-Mail auf Brief und voller Nachverfolgung des Zustellstatus. ## Übersicht Mit dem Postversand versendest du Rechnungen, Stornos und Gutschriften als physischen Brief. Fynn übergibt das fertige Dokument an einen Druckdienstleister, der es druckt, kuvertiert und verschickt. Den Versand- und Zustellstatus siehst du direkt an der Rechnung und in einer eigenen Übersicht. Der Brief nutzt dieselbe PDF wie der E-Mail-Versand. Die Empfängeradresse wird aus dem Adressfenster des Dokuments gelesen, du musst also keine Adresse separat pflegen. Sobald der Postversand für deine Organisation aktiv ist, blendet Fynn die Absenderzeile im Adressfenster automatisch aus, damit die Empfängeradresse sauber erkannt wird. Der Postversand wird für deine Organisation freigeschaltet. Wende dich an uns, wenn du ihn nutzen möchtest. ## Rechnung als Brief versenden Eine finalisierte Rechnung versendest du über die API auf dem Kanal `letter`: ```bash theme={null} curl -X POST https://coreapi.io/api/invoices/{id}/send \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{ "channel": "letter", "options": { "isColor": true, "isDuplex": false, "isInternational": false } }' ``` Mit `channel: "email"` versendest du dieselbe Rechnung stattdessen per E-Mail. ### Druckoptionen Die Optionen werden an den Druckdienstleister durchgereicht: | Option | Bedeutung | Standard | | ----------------- | -------------------------- | -------- | | `isColor` | Farbdruck statt Graustufen | `true` | | `isDuplex` | Beidseitiger Druck | `false` | | `isInternational` | Internationaler Versand | `false` | Die Antwort enthält den Kanal, den aktuellen Status und, sofern verfügbar, die Sendungsnummer: ```json theme={null} { "channel": "letter", "status": "submitted", "letterId": "…", "trackingNumber": "…" } ``` ## Automatischer Fallback von E-Mail auf Brief Ist ein Kunde per E-Mail nicht erreichbar, kann Fynn die Rechnung automatisch als Brief versenden. Der Fallback greift, wenn die letzte Rechnungs-E-Mail an den Kunden als unzustellbar zurückgekommen ist (Bounce) oder keine nutzbare E-Mail-Adresse hinterlegt ist, und wenn die Rechnung eine gültige Postadresse trägt. Der automatische Fallback ist konfigurierbar und wird zusätzlich zum Postversand freigeschaltet. So behältst du die Kontrolle darüber, ob nicht zustellbare E-Mails auf Papier ausweichen sollen. ## Zustellstatus nachverfolgen Jeder Brief durchläuft die folgenden Status: | Status | Bedeutung | | --------------- | --------------------------------------------------------- | | `submitted` | Vom Druckdienstleister angenommen und eingeplant | | `dispatched` | Gedruckt und der Post übergeben | | `delivered` | Zustellung bestätigt (nur bei nachverfolgbaren Produkten) | | `undeliverable` | Nicht zustellbar (falsche oder unbekannte Adresse) | | `failed` | Vom Druckdienstleister abgelehnt | | `cancelled` | Vor dem Versand storniert | In der **Rechnungsdetailansicht** siehst du zu jeder Rechnung den aktuellen Briefstatus, die Sendungsnummer und das Versand- sowie Zustelldatum. Unter **Einstellungen → Versendete Briefe** findest du alle versendeten Briefe deiner Organisation, filterbar nach Status, Datum und Kunde. ### Fehlgeschlagene Zustellung Kommt ein Brief nicht an (`undeliverable` oder `failed`), legt Fynn automatisch eine Aufgabe an, die dir den betroffenen Kunden und die Rechnung anzeigt. So siehst du direkt, wo Handlungsbedarf besteht, und kannst die Adresse prüfen und den Versand erneut anstoßen. ## Webhooks Für die Anbindung eigener Systeme stehen zwei Ereignisse bereit: * `invoice.letter.dispatched` wird ausgelöst, sobald der Brief an den Druckdienstleister übergeben wurde. * `invoice.letter.delivered` wird ausgelöst, sobald die Zustellung bestätigt ist. Beide Ereignisse enthalten die Rechnung sowie die Briefdaten mit Status und Sendungsnummer. Mehr zur Einrichtung von Webhooks findest du in der [Webhooks-Übersicht](/guide/webhooks/introduction). # E-Mail Vorlagen Variablen Source: https://docs.fynn.eu/guide/notifications/template-variables Alle verfügbaren Variablen für E-Mail Benachrichtigungen Alle Variablen werden automatisch formatiert. Daten werden entsprechend der Sprache des Empfängers formatiert (Deutsch: `31.12.2024`, Englisch: `12/31/2024`). Geldbeträge werden ebenfalls automatisch formatiert. ## Übersicht Alle Variablen sind bereits formatiert und müssen nicht zusätzlich formatiert werden. **Wichtig**: * Alle Daten und Datum/Zeit-Werte werden automatisch formatiert * Alle Geldbeträge sind bereits formatiert mit Währungssymbolen ## Variablen-Kategorien ### Kundeninformationen Verfügbar in allen Benachrichtigungen: * `customer.firstName` - Vorname des Kunden (Text) * `customer.lastName` - Nachname des Kunden (Text) * `customer.companyName` - Firmenname, falls vorhanden (Text, optional) * `customer.customerNumber` - Kundennummer (Text) * `customer.language` - Sprache des Kunden (Text) * `customer.locale` - Locale-Code des Kunden (Text) * `customer.contactPerson.firstName` - Vorname der Kontaktperson (Text, optional) * `customer.contactPerson.lastName` - Nachname der Kontaktperson (Text, optional) * `customer.contactPerson.email` - E-Mail der Kontaktperson (Text, optional) ### Organisationsinformationen Verfügbar in allen Benachrichtigungen: * `tenant.name` - Name der Organisation (Text) * `tenant.legalCompanyName` - Rechtlicher Firmenname (Text) * `tenant.street` - Straße (Text) * `tenant.housenumber` - Hausnummer (Text) * `tenant.zip` - Postleitzahl (Text) * `tenant.city` - Stadt (Text) * `tenant.email` - E-Mail-Adresse (Text) * `tenant.phone` - Telefonnummer (Text, optional) * `tenant.ceo` - Geschäftsführer (Text) * `tenant.commercialRegisterNumber` - Handelsregisternummer (Text) * `tenant.commercialRegister` - Handelsregister (Text) ### Rechnungsinformationen Verfügbar in rechnungsbezogenen Benachrichtigungen: * `invoice.number` - Rechnungsnummer (Text) * `invoice.grossAmount` - Gesamtbetrag inklusive Steuern (formatiert) * `invoice.netAmount` - Nettobetrag ohne Steuern (formatiert) * `invoice.taxAmount` - Steuerbetrag (formatiert) * `invoice.dueDate` - Fälligkeitsdatum (formatiert: `d.m.Y` für Deutsch, `m/d/Y` für Englisch) * `invoice.finalizationDate` - Datum der Rechnungsstellung (formatiert, optional) * `invoice.payDate` - Zahlungsdatum (formatiert, optional) * `invoice.documentDate` - Dokumentdatum (formatiert) * `invoice.customerNumber` - Kundennummer (Text) * `invoice.referencedInvoiceNumber` - Referenz-Rechnungsnummer (Text, optional) * `invoice.referencedInvoiceDate` - Referenz-Rechnungsdatum (formatiert, optional) * `invoice.referencedInvoiceDueDate` - Referenz-Fälligkeitsdatum (formatiert, optional) * `invoice.referencedInvoiceTotalGrossAmount` - Referenz-Rechnungsbetrag (formatiert, optional) * `invoice.dueDateInDays` - Tage bis Fälligkeit (Zahl, optional) * `invoice.dunningLevel` - Mahnstufe (Zahl, optional) * `invoice.paymentMethod.type` - Zahlungsmethoden-Typ (Text, optional) * `invoice.paymentMethod.displayName` - Vorfomatieter Anzeigename der Zahlungsmethode (Text, optional) * `invoice.paymentMethod.card.lastFour` - Letzte vier Ziffern der Karte (Text, optional, nur bei Karten) * `invoice.paymentMethod.card.expirationDate` - Ablaufdatum der Karte formatiert als "MM/YYYY" (Text, optional, nur bei Karten) ### Transaktionsinformationen Verfügbar in transaktionsbezogenen Benachrichtigungen: * `transaction.amount` - Transaktionsbetrag (formatiert) * `transaction.refundAmount` - Rückerstattungsbetrag (formatiert, optional) * `transaction.chargedAmount` - Belasteter Betrag (formatiert, optional) * `transaction.description` - Transaktionsbeschreibung (Text) * `transaction.documentNumber` - Dokumentreferenznummer (Text) * `transaction.paidAt` - Datum und Uhrzeit der Zahlung (formatiert: `d.m.Y H:i` für Deutsch, `m/d/Y h:i A` für Englisch, optional) * `transaction.failedAt` - Datum und Uhrzeit des Fehlschlags (formatiert, optional) * `transaction.failReason` - Fehlergrund (Text, optional) * `transaction.offsiteReason` - Grund für Offsite-Autorisierung (Text, optional) * `transaction.paymentMethod.type` - Zahlungsmethoden-Typ (Text, optional) * `transaction.paymentMethod.displayName` - Vorfomatieter Anzeigename der Zahlungsmethode (Text, optional) * `transaction.paymentMethod.card.lastFour` - Letzte vier Ziffern der Karte (Text, optional, nur bei Karten) * `transaction.paymentMethod.card.expirationDate` - Ablaufdatum der Karte formatiert als "MM/YYYY" (Text, optional, nur bei Karten) ### Zahlungsmethoden-Informationen Verfügbar in zahlungsmethodenbezogenen Benachrichtigungen: * `paymentMethod.type` - Zahlungsmethoden-Typ (Text) * `paymentMethod.displayName` - Vorfomatieter Anzeigename der Zahlungsmethode (Text) * `paymentMethod.card.lastFour` - Letzte vier Ziffern der Karte (Text, optional, nur bei Karten) * `paymentMethod.card.expirationDate` - Ablaufdatum der Karte formatiert als "MM/YYYY" (Text, optional, nur bei Karten) ### Abonnement-Informationen Verfügbar in abonnementbezogenen Benachrichtigungen: * `subscription.number` - Abonnementnummer (Text) * `subscription.name` - Abonnementname (Text) * `subscription.poNumber` - Bestellnummer (Text, optional) * `subscription.trialEndsOn` - Datum des Testzeitraum-Endes (formatiert, optional) * `subscription.customFields.` - Wert eines benutzerdefinierten Feldes (Text, optional) ### Preisänderungs-Items Verfügbar in Preisänderungs-Benachrichtigungen (Array): * `updateItems[].subscriptionId` - Abonnement-ID (Text) * `updateItems[].subscriptionNumber` - Abonnementnummer (Text) * `updateItems[].subscriptionName` - Abonnementname (Text) * `updateItems[].contractStart` - Vertragsstartdatum und -zeit (formatiert) * `updateItems[].applyOn` - Datum und Zeit der Anwendung (formatiert) * `updateItems[].billingInterval` - Abrechnungsintervall (z.B. "monatlich", "jährlich") (Text) * `updateItems[].oldPrice` - Vorheriger Preis (formatiert) * `updateItems[].newPrice` - Neuer Preis (formatiert) ## Verwendungsbeispiele ### Einfacher Variablenzugriff ``` Hallo {{ customer.firstName }} {{ customer.lastName }}, Ihre Rechnung {{ invoice.number }} über {{ invoice.totalGrossAmount }} ist fällig. ``` ### Verschachtelte Eigenschaften ``` Zahlungsmethode: {{ invoice.paymentMethod.displayName }} {% if invoice.paymentMethod.card %} Kartennummer: ****{{ invoice.paymentMethod.card.lastFour }} Ablaufdatum: {{ invoice.paymentMethod.card.expirationDate }} {% endif %} ``` ### Datumsformatierung Daten werden automatisch basierend auf der Sprache formatiert: * Deutsch (`de`): `d.m.Y` (z.B. `31.12.2024`) * Englisch (`en`): `m/d/Y` (z.B. `12/31/2024`) Datum/Zeit werden formatiert als: * Deutsch (`de`): `d.m.Y H:i` (z.B. `31.12.2024 14:30`) * Englisch (`en`): `m/d/Y h:i A` (z.B. `12/31/2024 02:30 PM`) ``` Fälligkeitsdatum: {{ invoice.dueDate }} Bezahlt am: {{ transaction.paidAt }} ``` ### Array-Iteration ``` {% for item in updateItems %} Abonnement: {{ item.subscriptionName }} ({{ item.subscriptionNumber }}) Alter Preis: {{ item.oldPrice }} / {{ item.billingInterval }} Neuer Preis: {{ item.newPrice }} / {{ item.billingInterval }} Gültig ab: {{ item.applyOn }} {% endfor %} ``` ### Bedingter Zugriff ``` {% if invoice.paymentMethod %} Zahlungsmethode: {{ invoice.paymentMethod.displayName }} {% endif %} {% if transaction.failReason %} Fehlergrund: {{ transaction.failReason }} {% endif %} ``` ## API-Zugriff Du kannst alle verfügbaren Variablen programmatisch über die API abrufen: ``` GET /ui/notification-template-variables?notificationType=invoice.finalized ``` Dies gibt eine JSON-Antwort mit allen Variablen zurück, gruppiert nach Kategorien, einschließlich Beschriftungen, Typen und Beschreibungen. # Oauth2 Flow Source: https://docs.fynn.eu/guide/oauth2/introduction OAuth 2.0 ist ein offenes Standardprotokoll zur sicheren Autorisierung von Anwendungen, ohne dass Benutzer ihre Zugangsdaten direkt weitergeben müssen. Stattdessen erhält eine Anwendung Zugriff auf eine API, indem sie Tokens verwendet. | Type | URL | | ------------------------------- | ------------------------------------------------------------------------------------------------------------------ | | Authorize Endpoint (Production) | [https://oauth2.coreapi.io/oauth2/auth](https://oauth2.coreapi.io/oauth2/auth) | | Token Endpoint (Production) | [https://oauth2.coreapi.io/oauth2/token](https://oauth2.coreapi.io/oauth2/token) | | JWK Keys (Production) | [https://oauth2.coreapi.io/.well-known/jwks.json](https://oauth2.coreapi.io/.well-known/jwks.json) | | Authorize Endpoint (Preview) | [https://oauth2.preview.coreapi.io/oauth2/auth](https://oauth2.preview.coreapi.io/oauth2/auth) | | Token Endpoint (Preview) | [https://oauth2.preview.coreapi.io/oauth2/token](https://oauth2.preview.coreapi.io/oauth2/token) | | JWK Keys (Preview) | [https://oauth2.preview.coreapi.io/.well-known/jwks.json](https://oauth2.preview.coreapi.io/.well-known/jwks.json) | Um Zugriff auf Oauth2 Clients zu erhalten, erstelle ein Support-Ticket. Redirect URLs müssen https verwenden. Hierbei ist [http://localhost](http://localhost) und [http://127.0.0.1](http://127.0.0.1) die Ausnahme. ## Grundkonzepte von OAuth 2.0 * Authorization Server: Verifiziert die Identität des Benutzers und gibt Access Tokens aus. * Resource Server: Der Server, der die geschützten Ressourcen bereitstellt (z. B. eine API). * Client: Die Anwendung, die auf die API zugreifen möchte. * Resource Owner: Der Benutzer, der entscheidet, ob eine Anwendung Zugriff auf seine Ressourcen erhält. * Access Token: Ein temporäres Token, das für den Zugriff auf die API verwendet wird. * Refresh Token (optional): Ein langfristiges Token, das zur Erneuerung eines Access Tokens genutzt wird. ## Grant Types Je nach Anwendungsszenario gibt es unterschiedliche Grant Types, die festlegen, wie ein Client ein Access Token erhält. Folgende Grant Types sind durch Fynn unterstützt: ### Authorization Code Flow (mit oder ohne PKCE) Der Authorization Code Flow ist ein OAuth2-Prozess, der für Webanwendungen entwickelt wurde, um Benutzer sicher zu authentifizieren und Zugriff auf geschützte Ressourcen zu gewähren. Dieser Flow wird besonders für serverseitige Anwendungen empfohlen, da die sensiblen Zugangsdaten nicht direkt im Frontend gespeichert werden. * Einsatzbereich: Webanwendungen & mobile Apps * Sicherheit: Sehr hoch (Tokens werden nur im Backend verwaltet) Ablauf des Authorization Code Flow 1. Weiterleitung zur Autorisierungsanfrage: Die Anwendung leitet den Benutzer auf die Anmeldeseite des Autorisierungsservers weiter. Hier gibt die Anwendung an, welche Berechtigungen (Scopes) sie benötigt. 2. Benutzerauthentifizierung und Zustimmung: Der Benutzer meldet sich beim Autorisierungsserver an und wird gefragt, ob er der Anwendung den gewünschten Zugriff gewähren möchte. 3. Erhalt des Autorisierungscodes: Nach erfolgreicher Authentifizierung wird der Benutzer zurück zur Anwendung geleitet. Dabei wird ein einmaliger Autorisierungscode übergeben. 4. Austausch des Codes gegen ein Zugriffstoken: Die Anwendung sendet den erhaltenen Code zusammen mit einem geheimen Schlüssel an den Autorisierungsserver. Falls die Anfrage gültig ist, stellt der Server ein Access Token aus. 5. Zugriff auf geschützte Ressourcen: Mit dem erhaltenen Access Token kann die Anwendung nun auf geschützte APIs zugreifen und im Namen des Benutzers Daten abrufen oder Aktionen durchführen. #### Proof Key for Code Exchange (PKCE) PKCE (Proof Key for Code Exchange) ist eine Erweiterung des Authorization Code Flow, die speziell für öffentliche Clients wie Single-Page- und Mobile-Apps entwickelt wurde. Es verhindert, dass der Autorisierungscode durch Angriffe (z. B. Code Interception) missbraucht wird. Funktionsweise von PKCE: * Der Client generiert einen zufälligen Code Verifier (eine lange, zufällige Zeichenkette). * Daraus wird eine Code Challenge abgeleitet (eine transformierte Version des Verifiers, meist als SHA-256 Hash). * Beim Austausch des Autorisierungscodes gegen ein Access Token muss der Client den ursprünglichen Code Verifier mit senden. * Der Server überprüft die Challenge und stellt das Access Token nur aus, wenn die Werte übereinstimmen. Da kein geheimer Schlüssel gespeichert werden muss, ist PKCE besonders für Clients ohne sichere Speicherung (z. B. Browser-Anwendungen) wichtig. #### Erweiterungen des Authorization Code Flow 1. Refresh Token für langfristigen Zugriff: Damit sich ein Benutzer nicht ständig neu authentifizieren muss, kann zusätzlich ein Refresh Token angefordert werden. Dies ermöglicht es der Anwendung, ohne erneute Benutzereingabe neue Access Tokens zu erhalten. Hierfür ist der Scope `offline` notwendig. 2. ID Token für Benutzerinformationen (OpenID Connect): Falls die Anwendung auch Informationen über den angemeldeten Benutzer benötigt, kann ein ID Token angefordert werden. Dieses wird als JWT (JSON Web Token) ausgestellt und enthält beispielsweise die Benutzer-ID, E-Mail-Adresse oder weitere Identitätsattribute. Hierfür ist der Scope `openid` notwendig. 3. Scopes zur Steuerung der Berechtigungen: Der Autorisierungsprozess kann durch verschiedene Scopes gesteuert werden. Diese definieren, welche Daten oder Funktionen der Benutzer der Anwendung freigibt. #### Beispiel Szenario: Eine Webanwendung möchte den Benutzer authentifizieren und erhält Zugriff auf eine geschützte API. 1. Benutzer wird zur Autorisierung weitergeleitet Die Anwendung leitet den Benutzer zum Autorisierungsserver weiter: ``` GET https://oauth2.coreapi.io/oauth2/auth ?response_type=code &client_id=client123 &redirect_uri=https://my-app.com/callback &scope=openid offline entitlements.read &state=randomString ``` 2. Benutzer meldet sich an Der Benutzer wird zum Login-Formular von Fynn weitergeleitet. Nach der Anmeldung fragt Fynn, ob die Anwendung Zugriff erhalten darf. Wenn der Benutzer zustimmt, gibt der Server einen Autorisierungscode zurück: ``` GET https://my-app.com/callback?code=AUTH_CODE&state=randomString ``` 3. Anwendung tauscht den Code gegen ein Access Token Die Anwendung sendet nun eine POST-Anfrage an den Autorisierungsserver: ``` POST https://oauth2.coreapi.io/oauth2/token Content-Type: application/x-www-form-urlencoded client_id=client123 &client_secret=superSecret &grant_type=authorization_code &code=AUTH_CODE &redirect_uri=https://my-app.com/callback ``` Der Server gibt ein Access Token, Refresh Token und JWT Token (OpenID), je nach angegebenen Scopes, zurück: ``` { "access_token": "...", "expires_in": 3600, "refresh_token": "...", "id_token": "...", "scope": "...", "token_type": "Bearer" } ``` ### Refresh Token Wenn das Access Token abläuft, kann die Anwendung ein neues Token mit einem Refresh Token anfordern: ``` POST https://oauth2.coreapi.io/oauth2/token Content-Type: application/x-www-form-urlencoded client_id=client123 &client_secret=superSecret &grant_type=refresh_token &refresh_token=abcd1234 &scope=offline openid entitlements.read ``` Der Server gibt ein Access Token, Refresh Token und JWT Token (OpenID), je nach angegebenen Scopes, zurück: ``` { "access_token": "...", "expires_in": 3600, "refresh_token": "...", "id_token": "...", "scope": "...", "token_type": "Bearer" } ``` Wenn ein Client ein Refresh Token verwendet, um ein neues Access Token zu erhalten, wird auch einen neuer ID Token ausgestellt, sofern der ursprüngliche Token-Austausch bereits einen ID Token enthalten hat. Der neue ID Token hat eine aktualisierte Ablaufzeit, behält jedoch den gleichen auth\_time-Wert (den Zeitpunkt der ursprünglichen Authentifizierung des Benutzers) bei. Das auth\_time-Claim im ID Token dient dazu, festzustellen, ob die Authentifizierungssitzung des Benutzers noch aktiv ist. ## Scopes Scopes definieren, welche Berechtigungen eine Anwendung innerhalb eines Zugriffs erhält. Sie begrenzen den Zugriff auf spezifische APIs und Funktionen. Folgende Scopes werden aktuell unterstützt: | Scope | Bedeutung | | ----------------- | --------------------------------------------------------- | | openid | Zugriff auf die OpenID-Identität des Benutzers (bei OIDC) | | offline | Ermöglicht das Anfordern von Refresh Tokens | | entitlements.read | Erlaubt das Abrufen des Entitlements Endpunkt | Scopes werden sowohl bei der Autorisierungsanfrage als auch bei der [Anlage des Oauth2 Clients](#) angegeben. ## OpenID Connect OpenID Connect erweitert die Authentifizierungsfunktionen von OAuth, indem es Komponenten wie ein ID-Token einführt, das als JSON Web Token (JWT) ausgegeben wird. OpenID Connect ermöglicht eine standardisierte Authentifizierung, indem es auf OAuth 2.0 aufbaut und sicherstellt, dass Anwendungen die Identität eines Benutzers vertrauenswürdig verifizieren können. Um OpenID Connect zu verwenden, muss der Scope `openid` hinzugefügt werden. Anschließend wird beim Abruf der Tokens ebenfalls ein ID Token zurückgegeben. ### ID Token Das ID-Token ist konzeptionell mit einem Personalausweis vergleichbar, da es eine Reihe von JSON-Claims über den Benutzer enthält, wie zum Beispiel: * sub (Subject) – Eindeutige Kennung des Benutzers * name – Vollständiger Name des Benutzers * email – E-Mail-Adresse des Benutzers * iat (Issued At) – Zeitpunkt, zu dem das Token ausgestellt wurde * exp (Expiration) – Ablaufzeit des Tokens * iss (Issuer) – Identitätsanbieter (IdP), der das Token ausgestellt hat * aud (Audience) – Die Zielanwendung, für die das Token bestimmt ist ```JWT Decoded ID Token theme={null} { iss: "https://oauth2.coreapi.io", sub: "some-identity-id", aud: "some-client-id", exp: 1311281970, iat: 1311280970, nonce: "KxSty13b2L", name: "Jane Doe", given_name: "Jane", family_name: "Doe", email: "jane@example.org", email_verified: true, } ``` ### Validierung ID Token (JWK) Der ID Token kann mit Hilfe der JWK Keys validiert werden. Der notwendige Endpunkt hierfür lautet: `https://oauth2.coreapi.io/.well-known/jwks.json`, `https://oauth2.preview.coreapi.io/.well-known/jwks.json`. ID Tokens dürfen nicht für API-Zugriffe verwendet werden. ### OpenID Connect Logout Folgende Flows werden aktuell unterstützt: | Feature | Front-Channel | Back-Channel | | ---------------------- | --------------------------------------------------- | ------------------------------------------------------------- | | Logout-Mechanismus | Benutzer wird per Browser weitergeleitet | Server-zu-Server-Anfrage | | Client-Session beenden | Durch Cookie- oder Session-Invalidierung im Browser | Direkt auf dem Server (z. B. Token-Revokation) | | Browser benötigt? | Ja | Nein | | Geeignet für | Web-Apps mit Session-basiertem Login | Sicherheitssensitive Anwendungen ohne Client-Side-Interaktion | #### OpenID Connect Front-Channel Logout 1.0 Hierfür benötigen wir eine `Logout URI`. Teile uns diese bitte mit. Funktionsweise: * Wenn sich ein Benutzer abmeldet, leitet Fynn den User-Agent (Browser) an die registrierte `Logout URI` weiter. * Die OAuth2-Client-Anwendung kann den Benutzer dann auch in deinem eigenen System abmelden, z. B. durch: * Löschen eines Authentifizierungs-Cookies * Invalidieren der Benutzersitzung #### OpenID Connect Back-Channel Logout 1.0 Hierfür benötigen wir eine \`Logout URI\`\`. Teile uns diese bitte mit. Beim Abmelden eines Benutzers wird eine HTTP-POST-Anfrage mit dem Content-Type application/x-www-form-urlencoded und einem `logout_token` an die konfigurierte URL gesendet. Das logout\_token ist ein JWT, das mit demselben Schlüssel signiert ist, der auch für die Signierung von OpenID Connect ID-Tokens verwendet wird. Daher sollte das logout\_token mithilfe des öffentlichen Schlüssels für ID-Tokens validiert werden, welcher über `/.well-known/jwks.json` abgerufen werden kann. Das logout\_token enthält die folgenden Claims: * iss (Issuer) – Identifikator des ausstellenden OpenID-Providers: `https://oauth2.coreapi.io` oder `https://oauth2.preview.coreapi.io` * aud (Audience) – Die Client-ID des OAuth2-Clients, für den dieses Logout-Token bestimmt ist. * iat (Issued At) – Zeitpunkt, zu dem das Token ausgestellt wurde. Kann verwendet werden, um das Alter des Tokens zu bestimmen. * jti (JWT ID) – Eindeutige Kennung des JWTs, um Replay-Angriffe zu verhindern. Das Token sollte nur einmal verwendet werden. * events – Enthält den Eintrag [http://schemas.openid.net/event/backchannel-logout](http://schemas.openid.net/event/backchannel-logout). Dies deklariert, dass das JWT ein Logout-Token ist. Der entsprechende Wert MUSS ein JSON-Objekt sein und SOLLTE sein (leeres JSON-Objekt). * sid (Session ID) – Eine Sitzungs-ID, die eine bestimmte Sitzung mit einem ID-Token verknüpft. Diese wird beim Logout-Aufruf als Parameter übergeben. # Angebote Source: https://docs.fynn.eu/guide/offers/introduction Erstelle und verwalte deine Angebote. ## Angebote unterzeichnen ### Angebot gegenzeichnen Aktiviere den Gegenzeichner in den [Einstellungen](https://app.fynn.eu/settings/offer), um automatisch einen internen Signierer hinzuzufügen (bspw. den CEO). Sobald alle Parteien im Angebot unterschrieben haben, erhält der Gegenzeichner eine Aufforderung um das Angebot final zu unterschreiben. Gegenzeichner einrichten ### Compliance & Sicherheit Die E-Signaturen werden durch [DocuSeal](https://www.docuseal.com) durchgeführt. Dabei wird das höchste Level an Sicherheit, Transparenz und Compliance von digitalen Signaturen gewährleistet. Weitere Informationen zur Compliance findest du [hier](https://www.docuseal.com/compliance). # Regeln für Bankbuchungen Source: https://docs.fynn.eu/guide/payments/bank-transaction-rules Wiederkehrende Transaktionen automatisch ignorieren mit konfigurierbaren Regeln ## Übersicht Mit Regeln kannst du wiederkehrende, irrelevante Bankbuchungen automatisch ignorieren lassen. Typische Anwendungsfälle: * Kontoführungsgebühren deiner Bank * Kreditkartenabbuchungen * Interne Umbuchungen zwischen eigenen Konten * Regelmäßige Abonnement-Zahlungen, die nicht zugeordnet werden müssen Regeln werden beim Import neuer Bankbuchungen automatisch angewendet. Du kannst sie auch nachträglich auf bestehende, offene Buchungen anwenden. Übersicht der Regeln in der Bankabstimmung ## Regel erstellen Navigiere zu [Buchhaltung > Kontobewegungen](https://app.fynn.eu/finance/bank-transactions) und klicke auf **Regeln** in der oberen Aktionsleiste. Klicke auf **Regel erstellen**. Es öffnet sich ein Formular mit folgenden Feldern: * **Name**: Beschreibender Name (z.B. "Kontogebühren ignorieren") * **Bedingungen**: Eine oder mehrere Filterbedingungen * **Priorität**: Reihenfolge der Regelauswertung (niedrigere Zahl = höhere Priorität) Jede Bedingung besteht aus drei Teilen: | Feld | Operator | Beispielwert | | -------------------- | ----------- | --------------- | | **Gegenpartei** | enthält | "Qonto" | | **IBAN** | ist gleich | "DE89..." | | **Verwendungszweck** | enthält | "Kontogebühren" | | **Betrag** | kleiner als | 50 | | **Typ** | ist gleich | "Lastschrift" | | **Transaktionscode** | ist gleich | "RCDT" | Beim Eingeben des Werts werden automatisch Vorschläge aus deinen bestehenden Bankbuchungen angezeigt. Klicke auf **Erstellen**. Die Regel ist sofort aktiv und wird bei allen zukünftigen Imports angewendet. ## Bedingungslogik ### Mehrere Bedingungen auf unterschiedlichen Feldern (UND) Wenn eine Regel Bedingungen auf verschiedenen Feldern hat, müssen **alle** zutreffen (UND-Verknüpfung). **Beispiel:** Gegenpartei enthält "Sparkasse" **UND** Verwendungszweck enthält "Gebühren" → Trifft nur auf Gebühren-Buchungen der Sparkasse zu, nicht auf reguläre Zahlungen. ### Mehrere Bedingungen auf demselben Feld (ODER) Wenn eine Regel mehrere Bedingungen auf dem gleichen Feld hat, reicht es, wenn **eine** zutrifft (ODER-Verknüpfung). **Beispiel:** Verwendungszweck enthält "Gebühren" **ODER** Verwendungszweck enthält "Entgeltabschluss" → Trifft auf beide Varianten zu. ### Kombiniert Du kannst beides kombinieren: Gegenpartei enthält "Sparkasse" **UND** (Verwendungszweck enthält "Gebühren" **ODER** "Entgeltabschluss") ## Vorschläge Fynn analysiert deine bereits manuell ignorierten Transaktionen und erkennt Muster. Wenn mindestens 3 Transaktionen vom selben Absender ignoriert wurden, schlägt das System eine passende Regel vor. Vorgeschlagene Regeln basierend auf ignorierten Transaktionen ### Vorschläge enthalten * Name und IBAN der Gegenpartei * Anzahl der erkannten Transaktionen * Die letzten Buchungen als Beispiele (mit Datum und Betrag) * Vorgefüllte Bedingungen ### Vorschlag übernehmen Klicke auf **Übernehmen**, um die vorgeschlagene Regel direkt zu erstellen. Du kannst Vorschläge auch mit dem X-Button verwerfen. ### Inline-Vorschlag nach dem Ignorieren Wenn du eine Transaktion manuell ignorierst und weitere offene Buchungen vom selben Absender existieren, zeigt Fynn direkt einen Hinweis an: > "Es gibt X weitere Transaktionen von \[Gegenpartei]. Regel erstellen?" Mit einem Klick auf **Regel erstellen** wird eine passende Regel angelegt. ## Regeln verwalten ### Regeln anzeigen Alle Regeln findest du unter **Regeln** in der Aktionsleiste der Kontobewegungen. Für jede Regel siehst du: * Name und Bedingungen * Status (Aktiv/Inaktiv) * Anzahl der Treffer * Letzter Treffer ### Regel aktivieren/deaktivieren Verwende den Toggle-Schalter neben jeder Regel, um sie zu aktivieren oder zu deaktivieren. Deaktivierte Regeln werden beim Import nicht ausgewertet. ### Regel bearbeiten Klicke auf das Stift-Symbol, um Name, Bedingungen und Priorität einer bestehenden Regel zu ändern. ### Regel löschen Klicke auf das Papierkorb-Symbol. Du wirst um Bestätigung gebeten, bevor die Regel endgültig gelöscht wird. ## Regeln auf bestehende Buchungen anwenden Neue Regeln gelten automatisch für zukünftige Imports. Um sie auch auf bereits vorhandene, offene Buchungen anzuwenden: 1. Öffne das Regel-Menü 2. Klicke auf **Regeln anwenden** 3. Bestätige die Aktion Fynn prüft alle offenen Transaktionen gegen deine aktiven Regeln und ignoriert passende Buchungen. Du erhältst eine Zusammenfassung: "X von Y Transaktionen wurden durch Regeln ignoriert". ## Verfügbare Operatoren | Operator | Beschreibung | Beispiel | | --------------- | ------------------------------------------------------- | --------------------------------------- | | **ist gleich** | Exakter Abgleich (Groß-/Kleinschreibung wird ignoriert) | IBAN ist gleich "DE89..." | | **enthält** | Teilstring-Suche | Verwendungszweck enthält "Gebühren" | | **beginnt mit** | Präfix-Abgleich | Verwendungszweck beginnt mit "LS RUECK" | | **größer als** | Numerischer Vergleich | Betrag größer als 100 | | **kleiner als** | Numerischer Vergleich | Betrag kleiner als 5 | ## Wann werden Regeln ausgewertet? | Zeitpunkt | Beschreibung | | --------------- | ------------------------------------------------------------------------------------------------------------------------ | | **Beim Import** | Jede neue Bankbuchung wird gegen alle aktiven Regeln geprüft. Die erste passende Regel wird angewendet (nach Priorität). | | **Manuell** | Über "Regeln anwenden" können bestehende, offene Buchungen nachträglich geprüft werden. | Durch eine Regel ignorierte Transaktionen zeigen in der Detailansicht an, welche Regel den Ignore ausgelöst hat. ## Häufige Fragen Regeln werden in Prioritätsreihenfolge ausgewertet (niedrigere Zahl = höhere Priorität). Die erste passende Regel wird angewendet, weitere werden nicht geprüft. Ja. Wähle die Buchung aus und klicke auf **Wiederherstellen**. Die Buchung wird wieder als offen angezeigt. Die Regel bleibt bestehen und greift beim nächsten Import erneut. Ja. Regeln gelten für alle Bankbuchungen, unabhängig ob sie über GoCardless, EBICS oder camt-Import eingehen. # Kontobewegungen Source: https://docs.fynn.eu/guide/payments/bank-transactions Bankbuchungen automatisch synchronisieren und mit offenen Rechnungen abgleichen ## Übersicht Unter [Buchhaltung > Kontobewegungen](https://app.fynn.eu/finance/bank-transactions) siehst du alle Bankbuchungen deines Unternehmens. Fynn gleicht eingehende Zahlungen automatisch mit offenen Rechnungen ab und schlägt Zuordnungen vor. Bankbuchungen gelangen auf zwei Wegen in Fynn: * **Automatisch** über eine verbundene Bankverbindung — empfohlen * **Manuell** über den Import von camt-Dateien (camt.052 / camt.053) — als Fallback ## Automatische Synchronisation über Bankverbindung Der empfohlene Weg: Verbinde dein Geschäftskonto direkt mit Fynn und erhalte Bankbuchungen automatisch — ohne manuellen Export oder Datei-Upload. **So funktioniert es:** * Fynn ruft neue Buchungen regelmäßig über die verbundene Bankverbindung ab * Eingehende Zahlungen werden automatisch mit offenen Rechnungen abgeglichen * Vorgeschlagene Zuordnungen können mit einem Klick bestätigt werden **Vorteile gegenüber manuellem Import:** * Kein manueller Datei-Export aus dem Online-Banking nötig * Buchungen erscheinen zeitnah in Fynn * Weniger Fehlerquellen durch vollautomatischen Prozess Die Einrichtung der Bankverbindung erfolgt unter [Einstellungen > Zahlungsmethoden](https://app.fynn.eu/settings/payment-methods). Eine Schritt-für-Schritt-Anleitung findest du in der [GoCardless-Integration](/integrations/payment-providers/go-cardless). ## camt-Import (camt.052 / camt.053) Falls keine Bankverbindung eingerichtet ist oder deine Bank die automatische Synchronisation nicht unterstützt, können Bankbuchungen manuell per camt-Datei importiert werden. Fynn unterstützt den Import von Bankbuchungen im ISO 20022 Format. Folgende Formate werden unterstützt: | Format | Beschreibung | Typischer Einsatz | | ------------ | ---------------------------------- | ---------------------------- | | **camt.052** | Kontoumsatzanzeige (Vormerkposten) | Untertägige Transaktionen | | **camt.053** | Elektronischer Kontoauszug | Tagesabschluss / Kontoauszug | Die meisten deutschen Banken bieten den Export als camt-XML im Online-Banking oder über EBICS an. ### Kontoauszug importieren Navigiere zu [Buchhaltung > Kontobewegungen](https://app.fynn.eu/finance/bank-transactions). Klicke auf `camt importieren` in der oberen Aktionsleiste. Es öffnet sich ein Import-Dialog. Ziehe die camt-XML-Datei in das Upload-Feld oder klicke auf das Feld, um eine Datei auszuwählen. Folgende Anforderungen gelten: * **Dateiformat:** XML (camt.052 oder camt.053) * **Maximale Dateigröße:** 30 MB Klicke auf `Importieren`. Die Datei wird hochgeladen und die Buchungen werden im Hintergrund verarbeitet. Du erhältst eine Bestätigung mit der Anzahl der gefundenen Buchungen. Bereits importierte Buchungen werden automatisch erkannt und übersprungen (Duplikaterkennung). Du kannst dieselbe Datei also bedenkenlos erneut importieren. ### Importierte Felder Folgende Informationen werden aus der camt-Datei übernommen: | Feld | Beschreibung | | ----------------------- | ------------------------------------------------------------ | | **Betrag** | Transaktionsbetrag inkl. Vorzeichen (Gutschrift/Lastschrift) | | **Währung** | Währungscode (z.B. EUR) | | **Buchungsdatum** | Datum der Buchung auf dem Konto | | **Valutadatum** | Wertstellungsdatum | | **Verwendungszweck** | Unstrukturierte Remittance-Information | | **Gegenpartei** | Name und IBAN des Absenders/Empfängers | | **End-to-End-Referenz** | Zahlungsreferenz (falls vorhanden) | ## Automatische Zuordnung Unabhängig davon, ob Buchungen über die Bankverbindung oder per camt-Import eingehen — Fynn versucht automatisch, sie offenen Rechnungen zuzuordnen. Die Zuordnung basiert auf: * **End-to-End-Referenz** — Abgleich mit der Rechnungsnummer * **Betrag** — Übereinstimmung mit dem offenen Rechnungsbetrag * **Kundendaten** — Abgleich der Gegenpartei mit bekannten Kunden Nicht automatisch zugeordnete Buchungen erscheinen im Status **Offen** und können manuell zugeordnet oder ignoriert werden. ## Manuelle Zuordnung Bei der manuellen Zuordnung suchst du eine passende Rechnung und weist sie der Bankbuchung zu. Um die richtige Rechnung sicher zu identifizieren, zeigt Fynn die **bestehende Zahlungshistorie** der Rechnung direkt in der Suchergebnis-Liste an. ### Zahlungshistorie einer Rechnung einsehen Klicke auf den Pfeil neben einer Rechnung in den Suchergebnissen, um die bisherigen Zahlungseingänge aufzuklappen. Für jede Transaktion wird angezeigt: | Feld | Beschreibung | | --------------- | --------------------------------------------------------------------------------------------------- | | **Status** | Aktueller Zahlungsstatus (Bezahlt, Ausstehend, Erstattet, Fehlgeschlagen) | | **Datum** | Zeitpunkt der Zahlung | | **Zahlungsweg** | Über welchen Kanal die Zahlung eingegangen ist (Stripe, PayPal, Überweisung, SEPA, Manuell, Wallet) | | **Betrag** | Gezahlter Betrag (bei Erstattungen mit Minus-Vorzeichen) | So erkennst du auf einen Blick, ob und in welcher Höhe bereits Zahlungen für eine Rechnung vorliegen — bevor du eine weitere Bankbuchung zuordnest. Das verhindert versehentliche Doppelzuordnungen. ## Häufige Fragen Fynn unterstützt die gängigen Versionen der Formate camt.052 und camt.053 (ISO 20022). Dazu gehören die Versionen 002, 003, 004 und 008. Falls du eine nicht unterstützte Version verwendest, kontaktiere bitte den Support. Fynn erkennt bereits importierte Buchungen anhand eines Hash-Werts über die Kernfelder (Betrag, Datum, Verwendungszweck etc.) und überspringt Duplikate automatisch. Einzelne importierte Buchungen können nicht automatisch gelöscht werden. Du kannst jedoch Buchungen ignorieren, die nicht relevant sind. Ja. Fynn normalisiert das XML automatisch, unabhängig davon, ob die Namespaces mit oder ohne Präfix deklariert sind. # Zahlungen Source: https://docs.fynn.eu/guide/payments/introduction Verwalte Zahlungen, Transaktionen und offene Beträge deiner Kunden Fynn bietet dir eine zentrale Übersicht über alle Zahlungen deiner Kunden. Verfolge Transaktionen, verwalte offene Beträge und behalte den Überblick über den Zahlungsstatus deiner Rechnungen. ## Zahlungsübersicht In der Zahlungsübersicht siehst du alle Transaktionen auf einen Blick: * **Erfolgreiche Zahlungen**: Abgeschlossene Transaktionen * **Ausstehende Zahlungen**: Noch nicht abgeschlossene Zahlungsvorgänge * **Fehlgeschlagene Zahlungen**: Transaktionen mit Fehlern ## Zahlungsmethoden Fynn unterstützt verschiedene Zahlungsmethoden, die du für deine Kunden aktivieren kannst: Automatischer Bankeinzug für wiederkehrende Zahlungen im SEPA-Raum. Visa, Mastercard und weitere Karten über Stripe. Beliebte Online-Zahlungsmethode für deine Kunden. Klassische Banküberweisung mit automatischem Abgleich. ## Zahlungen zuordnen Eingehende Zahlungen können automatisch oder manuell Rechnungen zugeordnet werden: 1. **Automatische Zuordnung**: Bei Lastschriften und Kartenzahlungen erfolgt die Zuordnung automatisch 2. **Manuelle Zuordnung**: Bei Überweisungen kannst du Zahlungen manuell zuordnen oder Vorschläge annehmen Nutze die EBICS-Integration für automatischen Kontoabgleich und intelligente Zahlungsvorschläge. ## Nächste Schritte Konfiguriere die verfügbaren Zahlungsmethoden für deine Kunden. Automatisiere den Umgang mit überfälligen Zahlungen. # Zahlungen verwalten Source: https://docs.fynn.eu/guide/payments/manage-payments Füge Zahlungen hinzu, stoße fehlgeschlagene Zahlungen erneut an und verwalte Zahlungsgebühren ## Zahlung hinzufügen Wenn ein Kunde eine Rechnung bezahlt, kannst du die Zahlung in Fynn manuell hinzufügen, um den Rechnungsstatus zu aktualisieren. Dies ist relevant, wenn bspw. Überweisungen getätigt wurden, oder die Zahlungen in einem Fremd-System erfasst wurden. Navigiere zur gewünschten Rechnung in der Rechnungsübersicht Klicke auf `Zahlung hinzufügen` Trage die Zahlungsdetails ein und bestätige mit `Speichern`. Entspricht der Betrag der Rechnung, wird die Rechnung automatisch auf `Bezahlt` gesetzt. Sofern die Benachrichtigungseinstellungen aktiviert sind, wird der Kunde über den Zahlungseingang und den aktualisierten Rechnungsstatus informiert. Zahlung hinzufügen Verwende hierfür den [Zahlung hinzufügen](/api-reference/invoice/add-invoice-payment) Endpunkt. ```bash theme={null} POST /invoices/{id}/payments ``` ## Zahlung erneut anstoßen Wenn eine Zahlung fehlgeschlagen ist, kannst du sie erneut anstoßen. Hierbei kann eine neue oder bestehende Zahlungsmethode verwendet werden. Nach Änderung der Zahlungsmethode wird der ausstehende Betrag automatisch über die neue Zahlungsmethode eingezogen. Navigiere zur gewünschten Rechnung in der Rechnungsübersicht Klicke auf `Aktionen` > `Zahlungsart ändern`. Wähle eine neue Zahlungsmethode aus und bestätige mit `Ausstehenden Betrag begleichen`. Die neue Zahlungsmethode wird automatisch für die ausstehende Zahlung verwendet. Zahlungsart ändern Verwende hierfür den [Zahlung erneut anstoßen](/api-reference/invoice/set-invoice-payment-method) Endpunkt. ```bash theme={null} POST /invoices/{id}/payment-method ``` ## Aktualität der Bankdaten prüfen In der Zahlungsübersicht siehst du direkt über der Tabelle, wann deine verbundenen Bankkonten zuletzt abgeglichen wurden — zum Beispiel `vor 2 Std., 14:32`. So erkennst du auf einen Blick, ob die angezeigten Zahlungen auf dem aktuellen Stand deiner Bank sind, bevor du Rechnungen zuordnest oder mit Kunden kommunizierst. Der Hinweis ist für alle Teammitglieder sichtbar, die Zugriff auf die Zahlungsübersicht haben. Auch wenn du die Bankbuchungen selbst nicht öffnen darfst, weißt du damit jederzeit, wie frisch die zugrunde liegenden Daten sind. Sind noch keine Bankkonten verbunden, erscheint stattdessen der Hinweis `Keine Bankkonten verbunden`. ## Zahlungsanbieter-Gebühren Bei Zahlungen über integrierte Zahlungsanbieter können Gebühren anfallen. Diese werden dir transparent in der Rechnungsdetailansicht angezeigt: 1. Öffne die Rechnung 2. Scrolle zum Abschnitt "Zahlungen" 3. Die Gebühren werden pro Zahlung einzeln ausgewiesen # Zahlungsmethoden verwalten Source: https://docs.fynn.eu/guide/payments/payment-methods Hinzufügen, bearbeiten und entfernen von Zahlungsmethoden für deine Kunden ## Übersicht Zahlungsmethoden sind die Grundlage für automatisierte Abrechnungen. Fynn unterstützt verschiedene Zahlungsmethoden: Automatischer Einzug via SEPA-Mandat. Unterstützt durch EBICS und Stripe. Visa, Mastercard, American Express und weitere. PCI-konform über Stripe. Beliebte Zahlungsmethode für Online-Käufe. Ein PayPal-Konto pro Kunde. Für manuelle Zahlungen. Keine automatische Abbuchung. *** ## Zahlungsmethode hinzufügen Navigiere zu **Kunden** und wähle den Kunden aus, für den du eine Zahlungsmethode hinzufügen möchtest. Wechsle zum Tab **Stammdaten**. Klicke im Bereich **Zahlungsmethoden** auf **+ Hinzufügen** und wähle den gewünschten Typ: Erfasse ein SEPA-Mandat direkt in Fynn: * **IBAN**: Die Bankverbindung des Kunden * **Kontoinhaber**: Name des Kontoinhabers * **Mandatsreferenz**: Wird automatisch generiert oder manuell eingegeben * **Unterschriftsdatum**: Datum der Mandatsunterschrift Das SEPA-Mandat wird digital gespeichert und kann jederzeit eingesehen werden. Über Stripe können Kreditkarten und SEPA-Lastschriften hinzugefügt werden. Der Kunde erhält einen sicheren Link zur Eingabe seiner Zahlungsdaten. Verbinde das PayPal-Konto des Kunden. Pro Kunde kann nur ein PayPal-Konto hinterlegt werden. Nach dem Hinzufügen kannst du die Zahlungsmethode als **Standard** markieren. Die Standard-Zahlungsmethode wird automatisch für neue Abonnements und Rechnungen verwendet. Du kannst dem Kunden einen Link senden, über den er selbst eine Zahlungsmethode hinzufügen kann: Klicke im Aktions-Menü (···) der Kundendetails auf **Zahlungsmethode anfordern**. Wähle, ob der Link per E-Mail an den Kunden gesendet werden soll, oder kopiere den Link manuell. Der Link ist **7 Tage** gültig. Der Kunde kann über den Link sicher seine Zahlungsdaten eingeben. Verwende den [Payment Method Link](/api-reference/paymentmethod/create-payment-method-link) Endpunkt: ```bash theme={null} POST /payment-methods/link ``` ```json theme={null} { "customer": "cus_abc123", "sendEmail": true, "allowedPaymentMethodTypes": ["card", "sepa_debit"] } ``` *** ## Zahlungsmethode entfernen Das Entfernen einer Zahlungsmethode kann Auswirkungen auf bestehende Abonnements haben. Fynn führt dich durch alle notwendigen Schritte. ### Standard-Zahlungsmethode entfernen Wenn du die aktuelle **Standard-Zahlungsmethode** entfernst, musst du eine neue Standard-Zahlungsmethode auswählen: Neue Standard-Zahlungsmethode auswählen Wähle eine der verbleibenden Zahlungsmethoden als neue Standard-Zahlungsmethode. Nach der Auswahl wird die neue Standard-Zahlungsmethode sofort aktiv. Alle Abonnements, die die "Standard-Zahlungsmethode des Kunden" verwenden, nutzen automatisch die neue Zahlungsmethode. ### Zahlungsmethode mit Abonnements Wenn Abonnements diese Zahlungsmethode **explizit** verwenden, musst du entscheiden, wohin die Abonnements migriert werden: Abonnements migrieren Die Abonnements werden auf die **Standard-Zahlungsmethode des Kunden** umgestellt. Dies ist die empfohlene Option, da zukünftige Änderungen der Standard-Zahlungsmethode automatisch übernommen werden. Die Abonnements werden auf eine **spezifische andere Zahlungsmethode** umgestellt. Diese bleibt fest zugewiesen, bis sie manuell geändert wird. *** ## Standard-Zahlungsmethode ändern Navigiere zu **Kunden** → Kunde auswählen → Tab **Stammdaten**. Klicke bei der gewünschten Zahlungsmethode auf das Radio-Button-Symbol, um sie als Standard zu markieren. Als Standard festlegen Verwende den [Set Default Payment Method](/api-reference/paymentmethod/set-default-payment-method) Endpunkt: ```bash theme={null} PUT /customers/{customerId}/payment-method ``` ```json theme={null} { "paymentMethodId": "pm_abc123" } ``` *** ## SEPA-Mandate ### Mandat einsehen Für SEPA-Zahlungsmethoden kannst du das hinterlegte Mandat jederzeit einsehen: Klicke auf den **SEPA-Mandat** Badge bei der entsprechenden Zahlungsmethode. Ein Popover zeigt alle relevanten Informationen: * Mandatsreferenz * Gläubiger-ID * IBAN (maskiert) * Kontoinhaber * Unterschriftsdatum * Mandatstyp (Einmalig/Wiederkehrend) ### SEPA-Fehler Bei fehlgeschlagenen SEPA-Lastschriften wird die Zahlungsmethode je nach Fehlerart behandelt: | Fehlertyp | Aktion | | ------------------------------------- | -------------------------------- | | **Mandatsproblem** (MD01, MD02, etc.) | Zahlungsmethode wird deaktiviert | | **Kontoproblem** (AC01, AC04, etc.) | Zahlungsmethode wird deaktiviert | | **Vorübergehend** (AM04, AM05, etc.) | Automatischer Retry wird geplant | | **Regulatorisch** (AG01, RR01, etc.) | Manuelle Prüfung erforderlich | Bei deaktivierten Zahlungsmethoden erhält der Kunde automatisch eine Benachrichtigung mit einem Link zum Hinzufügen einer neuen Zahlungsmethode. *** ## Häufige Fragen Nein, entfernte Zahlungsmethoden werden deaktiviert und können nicht wiederhergestellt werden. Der Kunde muss eine neue Zahlungsmethode hinzufügen. Beim Entfernen wirst du aufgefordert, die Abonnements zu einer anderen Zahlungsmethode oder zur Standard-Zahlungsmethode zu migrieren. Es gibt keine Unterbrechung der Abrechnung. Links zum Hinzufügen einer Zahlungsmethode sind **7 Tage** gültig. Danach muss ein neuer Link erstellt werden. Ja, ein Kunde kann beliebig viele Zahlungsmethoden haben. **Ausnahme:** Pro Kunde ist nur ein PayPal-Konto möglich. # Zahlungsplan Source: https://docs.fynn.eu/guide/payments/payment-plans Teile eine offene Rechnung in zinsfreie Monatsraten auf. Das Mahnwesen ruht, solange der Plan läuft. Kann ein Kunde eine Rechnung nicht auf einmal begleichen, richtest du einen **Zahlungsplan** ein. Der offene Betrag wird dann in mehrere Raten aufgeteilt, ohne Zinsen. Solange der Plan läuft, ruht das Mahnwesen für diese Rechnung, und fällige Lastschrift-Raten zieht Fynn automatisch ein. Ein Zahlungsplan ändert die Rechnung nicht: Sie bleibt eine Forderung und ist beglichen, sobald alle Raten bezahlt sind. Der Plan verteilt nur den offenen Betrag über die Zeit. ## Zahlungsplan einrichten Öffne die offene Rechnung, für die der Kunde in Raten zahlen soll. Ein Zahlungsplan ist für finalisierte, noch offene Rechnungen möglich, nicht für Entwürfe oder bereits bezahlte Rechnungen. Rechnungsdetails mit Option zum Einrichten eines Zahlungsplans Wähle im Bereich Zahlungsplan die Option zum Einrichten. Der offene Betrag der Rechnung ist die Summe, die auf die Raten verteilt wird. Dialog mit Auswahl zwischen gleichmäßiger Aufteilung und manuellen Raten Du hast zwei Wege: * **Gleichmäßig aufteilen:** Gib die Anzahl der Raten (zwei bis 36) und das Datum der ersten Rate an. Fynn berechnet die Beträge und die weiteren Termine im Monatsabstand. Geht der Betrag nicht glatt auf, landet der Rundungsrest auf der letzten Rate. * **Manuell festlegen:** Bestimme jede Rate mit eigenem Betrag und Fälligkeitsdatum. Die Termine müssen aufsteigend und in der Zukunft liegen, und die Summe aller Raten muss dem offenen Betrag der Rechnung entsprechen. Standardmäßig wird für den Einzug die Zahlungsmethode der Rechnung verwendet. Bestätige die Einrichtung. Der Plan läuft ab sofort, und das Mahnwesen für diese Rechnung ruht. Der Kunde erhält beim Einrichten eine E-Mail mit der Ratenübersicht, also allen Raten samt Fälligkeit und Betrag sowie dem Gesamtbetrag. Über die API kannst du diese E-Mail mit `sendEmail: false` abwählen. Zahlungsplan mit Ratenübersicht und Status je Rate ## Was passiert, während der Plan läuft Solange der Plan läuft, wird die Rechnung im Mahnlauf übersprungen. Es gehen keine Zahlungserinnerungen oder Mahnungen für diese Rechnung raus. * **Ankündigung per E-Mail:** Sieben Tage vor jeder Fälligkeit erhält der Kunde eine E-Mail. Bei Lastschrift kündigt sie den Einzug an, bei Überweisung ist sie eine Zahlungsaufforderung mit Betrag und Termin. * **Lastschrift wird automatisch eingezogen:** Zahlt der Kunde per Lastschrift, löst Fynn den Einzug sieben Tage vor Fälligkeit selbst aus. Du musst nichts tun. * **Überweisung mit einem Tag Karenz:** Zahlt der Kunde per Überweisung, ordnet Fynn den Zahlungseingang der Rechnung zu. Für den Abgleich gilt ein Tag Karenz nach der Fälligkeit. Jede bezahlte Rate zählt auf den offenen Betrag der Rechnung. Sind alle Raten bezahlt, ist die Rechnung beglichen und der Plan abgeschlossen. ## Was bei einem Planbruch passiert Ein Plan bricht, wenn ein Lastschrift-Einzug fehlschlägt oder eine Rate über ihre Frist hinaus unbeglichen bleibt. Bricht der Plan, wird der **gesamte Restbetrag sofort fällig**. Das Mahnwesen für die Rechnung läuft ab dann wieder, und der nächste Mahnlauf berücksichtigt die Rechnung ganz normal. Willst du dem Kunden trotzdem weiter entgegenkommen, kannst du den gebrochenen Plan verlängern (siehe unten). Er kehrt damit in den laufenden Zustand zurück, und das Mahnwesen ruht wieder. ## Verlängern statt neu anlegen Braucht ein Kunde mehr Zeit oder ist eine Rate ausgefallen, verlängere den bestehenden Plan, statt einen neuen anzulegen. Beim Verlängern legst du einen neuen Zeitplan für alle noch nicht bezahlten Raten fest. Bereits bezahlte Raten bleiben unberührt, und die Summe der neuen Raten entspricht dem aktuellen Restbetrag. Eine Rechnung kann nur einen aktiven Plan haben. Deshalb verlängerst du den bestehenden Plan, statt einen zweiten anzulegen. Ein gebrochener Plan läuft nach dem Verlängern wieder. ## Kündigen Soll ein Plan enden, kündige ihn. Der Restbetrag ist danach sofort fällig, und das Mahnwesen läuft wieder, genau wie bei einem Planbruch. Bereits bezahlte Raten bleiben verbucht. # Rücklastschriften Source: https://docs.fynn.eu/guide/payments/payment-returns Bearbeite zurückgegebene SEPA-Lastschriften an einem Ort: mit automatischer Zuordnung, Wiedereinzug, Gebühren und Selbstbedienung für deine Kunden. Wird eine SEPA-Lastschrift von der Bank zurückgegeben, legt Fynn dafür automatisch einen Vorgang an, ordnet ihn der ursprünglichen Rechnung und dem Kunden zu und schlägt anhand deiner Regeln die nächsten Schritte vor. Alle Rückläufer sammelst du an einem Ort, statt sie einzeln aus Kontoauszügen herauszusuchen. Ein Vorgang entsteht immer dann, wenn ein Einzug scheitert, zum Beispiel wegen fehlender Deckung, eines geschlossenen Kontos, eines fehlenden Mandats oder eines Widerspruchs des Kunden. ## Übersicht der Vorgänge Unter `Zahlungen > Rücklastschriften` findest du alle Rückläufer mit Status, Grundkategorie, Betrag und zugeordneter Rechnung. Du filterst nach Status, Kategorie, Kunde oder Zeitraum und exportierst die gefilterte Liste als CSV. Jeder Vorgang durchläuft einen Status: | Status | Bedeutung | | -------------------- | ---------------------------------------------------------------------- | | Erkannt | Der Rückläufer ist eingegangen, aber noch keiner Rechnung zugeordnet | | Zuordnung prüfen | Die automatische Zuordnung war nicht eindeutig, du ordnest von Hand zu | | Zugeordnet | Rechnung, Zahlung und Kunde sind verknüpft | | Bearbeitet | Die Rückbuchung ist verbucht, der offene Betrag steht wieder aus | | Wiedereinzug geplant | Ein erneuter Einzug ist für einen Stichtag vorgemerkt | | Wartet auf Kunde | Der Kunde wurde benachrichtigt und kann selbst reagieren | | In Prüfung | Der Vorgang liegt zur manuellen Entscheidung bei deinem Team | | Beigetrieben | Der offene Betrag ist ausgeglichen, der Vorgang ist abgeschlossen | | Abgeschrieben | Die Forderung wurde ausgebucht | | Übergeben | Der Fall wurde an ein Inkasso oder einen externen Prozess übergeben | Die letzten drei Status schließen den Vorgang ab. ### Grundkategorien Fynn ordnet jeden Rückläufer einer Kategorie zu, die steuert, wie er weiterbehandelt wird: | Kategorie | Typischer Grund | | ------------- | ----------------------------------------------------------- | | Deckung | Konto nicht ausreichend gedeckt, in der Regel vorübergehend | | Konto | Konto geschlossen, gesperrt oder erloschen | | Mandat | Kein oder kein gültiges SEPA-Mandat | | Widerspruch | Der Kunde hat der Lastschrift widersprochen | | Technisch | Format- oder Datenfehler beim Einzug | | Regulatorisch | Aufsichtsrechtliche Sperre | | Unbekannt | Kein näherer Grund von der Bank übermittelt | Den technischen Rückgabegrund der Bank sehen nur Benutzer mit der entsprechenden Berechtigung. In Listen, im Export und für deine Kunden bleibt es bei der Kategorie. ## Einen Vorgang bearbeiten Öffnest du einen Vorgang, siehst du den Verlauf, die zugeordnete Rechnung und die verfügbaren Aktionen: * **Zuordnen**: Verknüpfe den Rückläufer mit der richtigen Rechnung, falls die automatische Zuordnung nicht eindeutig war. * **Wiedereinzug**: Starte einen erneuten Einzug sofort oder plane ihn auf einen Stichtag. Fynn prüft dabei Mandat, Vorlauffrist und einen möglichen Mahnstopp. * **Gebühr**: Gib eine Rücklastschriftgebühr an den Kunden weiter oder erlasse sie mit einer Begründung. * **In Prüfung geben**: Eskaliere den Vorgang zur manuellen Entscheidung. * **Abschließen**: Schließe den Vorgang als beigetrieben, abgeschrieben oder übergeben ab, jeweils mit Begründung. Vorgänge aus einem Widerspruch des Kunden sperren eine Übergabe an Inkasso, solange der Widerspruch offen ist. Die Sperre hebst du bewusst mit einer schriftlichen Begründung auf. Der Schritt wird im Verlauf des Vorgangs festgehalten. ### Gebühren Die Gebühr, die du an den Kunden weitergibst, richtet sich nach deiner Regel. Bei Privatkunden ist sie auf die nachgewiesene Bankgebühr zuzüglich einer Porto-Pauschale gedeckelt, bei Geschäftskunden ist der Betrag frei. Bei Widerspruch, technischen Fehlern und aufsichtsrechtlichen Sperren wird keine Gebühr berechnet. ## Regeln festlegen Unter `Einstellungen > Rücklastschriften` legst du fest, wie Fynn Rückläufer automatisch behandelt. Die Regeln gelten je Kundensegment (Privat- und Geschäftskunden) und je Grundkategorie: | Einstellung | Optionen | | ----------------------- | ------------------------------------------------------------------------- | | Wiedereinzug | kein, automatisch nach Wartezeit, nur manuell | | Maximale Versuche | Anzahl der erneuten Einzüge, bevor der Abschluss greift | | Wartezeit | Tage bis zum nächsten Einzug | | Gebühr | keine, tatsächliche Bankgebühr, fester gedeckelter Betrag | | Zahlungsmethode sperren | SEPA-Lastschrift des Kunden bei Rückläufer deaktivieren | | Kunde benachrichtigen | Selbstbedienungs-Link versenden | | Abschluss | offen lassen, ausbuchen oder übergeben, wenn alle Versuche erschöpft sind | Für Deckungsrückläufer ist ein automatischer Wiedereinzug sinnvoll, weil der Grund meist vorübergehend ist. Bei Widerspruch, Mandats- und Kontofehlern greift Fynn nie automatisch zum Einzug, unabhängig von deiner Regel. ## Selbstbedienung für Kunden Ist `Kunde benachrichtigen` aktiv, erhält der Kunde einen Link und kann ohne Anmeldung selbst reagieren. Er sieht den offenen Betrag und die Rechnungsnummer, nie den technischen Rückgabegrund. Je nach Fall stehen ihm drei Wege offen: Der Kunde bestätigt einen erneuten Einzug und wählt bei Bedarf ein Datum. Fynn setzt es auf den frühestmöglichen Einzugstermin, wenn die Vorlauffrist es erfordert. Der Kunde hinterlegt ein neues SEPA-Mandat. Anschließend zieht Fynn alle offenen Rechnungen über die neue Verbindung ein. Der Kunde erhält Empfänger-IBAN, Verwendungszweck und einen QR-Code für die Überweisung. Der Zahlungseingang wird automatisch abgeglichen. Jede Reaktion des Kunden erscheint im Verlauf des Vorgangs, sodass dein Team den Stand jederzeit nachvollziehen kann. ## Auswertung Unter den Auswertungen findest du eine Übersicht über Rückläufer und Beitreibung: Rücklaufquote im Zeitverlauf, Aufschlüsselung nach Grundkategorie und Zahlungsweg sowie die Beitreibungsquote und die durchschnittliche Dauer bis zum Ausgleich. Für einzelne Kunden zeigt Fynn zusätzlich einen Risikohinweis, wenn sich Rückläufer häufen. # Einzugsplan (Wallet) Source: https://docs.fynn.eu/guide/payments/wallet-charge-plan Ziehe wiederkehrende Abschläge automatisch auf das Guthabenkonto deiner Kunden ein und überwache Fälligkeiten und Verzug Mit einem Einzugsplan lädst du das Guthabenkonto (Wallet) eines Kunden regelmäßig automatisch auf, zum Beispiel als monatlichen Abschlag bei einem Stromtarif. Der Plan erzeugt zu jedem Stichtag eine Rate, zieht sie über die hinterlegte Zahlungsmethode ein oder wartet auf eine Überweisung, und eskaliert bei Verzug. Das Guthaben wächst planmäßig und wird erst mit der Jahres- oder Schlussrechnung verrechnet. Es entsteht keine monatliche Rechnung. ## Einzugsplan anlegen Navigiere zum gewünschten Kunden und öffne den Tab `Einzugsplan`. Klicke auf `Einzugsplan anlegen` und lege fest: * **Betrag** je Rate * **Intervall**, zum Beispiel monatlich * **Stichtag**: der Tag im Monat, an dem eingezogen wird. Fällt der Tag nicht in den Monat (etwa der 31. im Februar), wird der letzte Tag des Monats verwendet. * **Raten**: optional die Anzahl der Raten, zum Beispiel 11 oder 12. Ohne Angabe läuft der Plan unbegrenzt. * **Methode**: `Zahlungsmethode belasten` zieht aktiv über die Zahlungsmethode des Kunden ein. `Überweisung erwarten` legt nur die Fälligkeit an und wartet auf den Zahlungseingang. Der Plan startet zum nächsten Stichtag. Pro Kunde gibt es einen Einzugsplan; erneutes Speichern ersetzt die Konfiguration. ## Raten und Status Jede Rate durchläuft einen eigenen Status, den du im Kunden-Tab und in der globalen Übersicht unter `Einzüge` verfolgst: | Status | Bedeutung | | -------------- | --------------------------------------------------------------------------------------------------- | | Geplant | Die Rate ist angelegt und wartet auf Einzug oder Zahlungseingang | | Bezahlt | Die Rate wurde eingezogen oder durch eine Aufladung gedeckt | | Fehlgeschlagen | Ein Einzugsversuch ist gescheitert, es folgt automatisch ein neuer Versuch | | Überfällig | Die erwartete Überweisung ist bis zum Stichtag nicht eingegangen | | Eskaliert | Nach drei gescheiterten Versuchen wurde die Rate an den Mahnprozess übergeben und der Plan pausiert | Bei jedem Fehlschlag und bei Verzug erhält der Kunde automatisch eine E-Mail-Erinnerung. Zusätzlich erscheint bei überfälligen und eskalierten Raten ein Eintrag in Signal, damit dein Team reagieren kann. ## Automatisierung über die API Alle Funktionen stehen auch über die API bereit, zum Beispiel für die Anbindung eines EVU-Systems. Der Einzugsplan ist eine automatische Aufladung vom Typ `scheduled`; daneben gibt es den Typ `threshold`, der auflädt, sobald das Guthaben unter einen Schwellwert fällt. Beide Typen können je Kunde und Währung parallel existieren. ```bash theme={null} curl -X POST https://api.fynn.eu/api/wallet/auto-top-up \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{ "customerId": "", "currencyCode": "EUR", "type": "scheduled", "topUpAmount": 50.00, "interval": "P1M", "chargeDay": 15, "installments": 11, "method": "bank_transfer" }' ``` * `POST /api/wallet/auto-top-up` legt die Regel an. `topUpAmount` ist der Betrag je Rate in Euro, `interval` eine ISO-8601-Dauer in ganzen Monaten (`P1M`, `P3M`, ...), `method` entweder `payment_method` oder `bank_transfer`. * `GET /api/wallet/auto-top-up?customerId=...` listet die Regeln des Kunden, inklusive Typ, Status und nächstem Stichtag. * `PUT /api/wallet/auto-top-up/{ruleId}` ändert die Regel. Ein geänderter Stichtag oder ein geändertes Intervall berechnet die nächste Fälligkeit neu. * `DELETE /api/wallet/auto-top-up/{ruleId}` kündigt den Einzugsplan; die Raten-Historie bleibt erhalten. * `GET /api/wallet/charges?customerId=...&status=overdue` listet Raten inklusive Fälligkeit, Versuchen und letztem Fehler. * `GET /api/wallet/top-ups?customerId=...` listet die Aufladungen des Guthabenkontos. Über Webhooks bleibst du über Verzug informiert: `wallet.charge.failed` wird bei jedem gescheiterten Einzugsversuch ausgelöst, `wallet.charge.overdue` bei ausbleibender Überweisung zum Stichtag und bei der Übergabe an den Mahnprozess. Der Einzugsplan ist ein eigenes Feature und setzt zusätzlich das Feature Wallet-Aufladung voraus. Wenn du den Einzugsplan nutzen möchtest, wende dich an den Fynn-Support, damit beide Features für deine Organisation aktiviert werden. # Abonnement aktivieren Source: https://docs.fynn.eu/guide/subscriptions/activate Aktiviere Abonnements und wähle einzelne Positionen zur Aktivierung aus Nach dem Erstellen befindet sich ein Abonnement im Status **Entwurf**. Um die Abrechnung zu starten, muss das Abonnement aktiviert werden. ## Aktivierung starten Öffne das Abonnement und klicke auf den Button **Aktivieren** in der oberen Aktionsleiste. Es öffnet sich der Aktivierungsdialog mit folgenden Optionen: ### Alle Produkte aktivieren Standardmäßig ist die Option **Alle Produkte aktivieren** eingeschaltet. In diesem Fall werden alle Positionen des Abonnements gleichzeitig aktiviert. Wenn du nur bestimmte Positionen aktivieren möchtest, deaktiviere die Option **Alle Produkte aktivieren**. Es erscheint eine Produktauswahl, in der du gezielt einzelne Positionen auswählen kannst. ### Positionen auswählen Wenn die Option **Alle Produkte aktivieren** deaktiviert ist, wird eine Produktliste angezeigt. Jede Position zeigt folgende Informationen: * **Produktname** und Beschreibung * **Status-Badge** (Entwurf, Aktiv, etc.) * **Preismodell** (z.B. Pauschal, Staffelung) * **Abrechnungsstart** — ab wann die Position abgerechnet wird Wenn ein Abonnement Produkte in mehreren Phasen enthält (unterschiedliche Startdaten), werden die Positionen nach Phase gruppiert. #### Suche und Auswahl * Nutze die **Suchleiste**, um Positionen nach Name oder Beschreibung zu filtern (erscheint ab 6 Positionen) * Klicke auf **Alle auswählen**, um alle Positionen auf einmal zu markieren * Unterprodukte werden automatisch mit dem übergeordneten Produkt ausgewählt ### Abrechnungsstart anpassen Standardmäßig beginnt die Abrechnung zum hinterlegten Vertragsstartdatum jeder Position. Wenn du den Abrechnungsstart manuell überschreiben möchtest, aktiviere die Option **Abrechnungsstart anpassen**. Es erscheint ein Datumsfeld, in dem du das gewünschte Startdatum auswählen kannst. Wenn du den Abrechnungsstart anpasst, wird in der Produktliste das ursprüngliche Datum durchgestrichen und das neue Datum farblich hervorgehoben angezeigt. So siehst du auf einen Blick, welche Änderung vorgenommen wird. ### Vertragsstart anpassen Zusätzlich zum Abrechnungsstart kann beim Aktivieren auch das **Vertragsstartdatum** überschrieben werden. Solange das Abonnement noch im Entwurf ist, wird das angepasste Vertragsstartdatum sowohl auf das Abonnement selbst als auch auf die ausgewählten Positionen (`itemIds`) angewendet. Sobald das Abonnement aktiv ist, betrifft die Änderung ausschließlich die ausgewählten Positionen. ## Aktivierung bestätigen Klicke auf **Abonnement aktivieren**, um die Aktivierung durchzuführen. Das Abonnement wechselt in den Status **Aktiv** und die Abrechnung beginnt zum festgelegten Datum. Die Aktivierung kann nicht rückgängig gemacht werden. Stelle sicher, dass die richtigen Positionen und das korrekte Abrechnungsstartdatum ausgewählt sind, bevor du bestätigst. ## Produkte nachträglich aktivieren Wenn ein aktives Abonnement neue Positionen im Status **Entwurf** enthält (z.B. nach dem Hinzufügen neuer Produkte), kann der Aktivierungsdialog erneut geöffnet werden, um diese Positionen einzeln zu aktivieren. In diesem Fall wird die Option **Alle Produkte aktivieren** nicht angezeigt. Die Aktivierung kann beliebig oft ausgeführt werden, solange das Abonnement noch Positionen im Status **Entwurf** enthält. So lassen sich Positionen schrittweise in mehreren Durchgängen aktivieren. # Abrechnungsgruppen Source: https://docs.fynn.eu/guide/subscriptions/billing-groups Fasse mehrere Abonnements zu einer gemeinsamen Rechnung zusammen Abrechnungsgruppen ermöglichen es, mehrere Abonnements zu einer Gruppe zusammenzufassen. Somit werden die Abonnements gemeinsam abgerechnet und auf einer Rechnung zusammengefasst. ## Abrechnungsgruppe erstellen Klicke hierzu im Abrechnungsgruppen-Dropdown auf "Abrechnungsgruppe erstellen". Vergebe einen eindeutigen Namen für die Abrechnungsgruppe. Diese wird nur intern verwendet und ist für Kunden nicht sichtbar. Wähle unter dem Punkt "Zeitpunkt" aus: * **Monatsanfang**: Die Abrechnung aller Abonnements erfolgt immer zum Monatsanfang. * **Monatsende**: Die Abrechnung aller Abonnements erfolgt immer zum Monatsende. * **Jahresanfang**: Die Abrechnung aller Abonnements erfolgt immer zum Jahresanfang. * **Jahresende**: Die Abrechnung aller Abonnements erfolgt immer zum Jahresende. * **Benutzerdefiniert**: Die Abrechnung aller Abonnements erfolgt an einem bestimmten Tag im Monat. Abrechnungsgruppe konfigurieren Klicke nun auf "Abrechnungsgruppe hinzufügen", um die Abrechnungsgruppe zu erstellen. ## Abonnement zu Abrechnungsgruppe hinzufügen Beim [Erstellen eines Abonnements](/guide/subscriptions/create) kannst du unter den erweiterten Abrechnungsdetails eine Abrechnungsgruppe auswählen. Alle Abonnements in derselben Abrechnungsgruppe werden gemeinsam abgerechnet. Abrechnungsgruppen sind kundenspezifisch. Du kannst für jeden Kunden separate Abrechnungsgruppen erstellen. # Abonnement kündigen Source: https://docs.fynn.eu/guide/subscriptions/cancel Kündige Abonnements und verwalte Kündigungsfristen Abonnements können jederzeit gekündigt werden. Die Kündigung eines Abonnements führt dazu, dass das Abonnement zum Ende des Kündigungsdatums beendet wird. Bis zu diesem Zeitpunkt können Kunden den Service weiterhin nutzen und werden entsprechend abgerechnet. Der Kündigungsdialog führt dich in drei Schritten durch die Kündigung. Dabei kannst du auch direkt entscheiden, was mit bereits gestellten Rechnungen passieren soll. Gehe zu [Abonnements](https://app.fynn.eu/subscriptions) und öffne das gewünschte Abonnement. Klicke im Menü oben rechts auf `Kündigen`. Wähle aus, ob das gesamte Abonnement oder nur einzelne Positionen gekündigt werden sollen, und lege den Kündigungszeitpunkt fest. Abonnement kündigen Dialog **Optionen für den Kündigungszeitpunkt:** * **Sofort**: Das Abonnement wird sofort gekündigt und der Service wird mit sofortiger Wirkung beendet. Hierbei werden die Kündigungsfristen und Laufzeiten ignoriert. * **Zum Vertragsende**: Wähle eines der angezeigten Vertragsenden aus. Fynn berechnet die möglichen Termine auf Basis der Kündigungsfristen und Laufzeiten. Auch ein späteres als das nächstmögliche Vertragsende ist wählbar. * **Zum angegebenen Datum**: Das Abonnement wird zum angegebenen Datum außerordentlich gekündigt. Hierbei werden die Kündigungsfristen und Laufzeiten ignoriert. Optional kannst du einen Kündigungsgrund auswählen, wenn du in den Einstellungen Kündigungsgründe hinterlegt hast. Im zweiten Schritt siehst du die Rechnungen, die zu den gekündigten Positionen gehören. Für jede Rechnung entscheidest du, ob sie korrigiert werden soll: die gesamte Rechnung oder nur einzelne Positionen. Was aus der Korrektur wird, entscheidet Fynn anhand des Zahlungsstands: * **Offene Beträge** werden per Stornorechnung mit dem offenen Betrag verrechnet. * **Bereits gezahlte Beträge** werden dem Kundenkonto als Guthaben gutgeschrieben und automatisch mit zukünftigen Rechnungen verrechnet. Überprüfe die Zusammenfassung und bestätige die Kündigung. Standardmäßig wird eine Kündigungsbestätigung an den Kunden gesendet. Dies kann über die Checkbox "Kündigungsbestätigung als PDF senden" deaktiviert werden. Auch der E-Mail-Versand für Storno- und Gutschriftbelege lässt sich hier steuern. Kündigung Vorschau Kündigung und Beleg-Anpassungen werden zusammen in einem Schritt ausgeführt. Schlägt ein Teil fehl, wird nichts davon durchgeführt. Es entstehen also keine halb ausgeführten Kündigungen. Verwende hierfür den [Abonnement kündigen](/api-reference/subscription/cancel-subscription) Endpunkt. ```bash theme={null} PUT /subscriptions/{id}/cancel ``` Alternativ steht in der v2 Platform API ein Endpunkt zur Verfügung, der die Kündigung und die zugehörigen Beleg-Korrekturen atomar in einem Aufruf ausführt: ```bash theme={null} POST /api/subscriptions/{id}/cancel ``` Der Request akzeptiert neben den Kündigungsparametern ein Array `invoiceCorrections`. Jeder Eintrag enthält die `invoiceId` und die zu korrigierenden Positionen (Format wie bei `POST /api/invoices/{id}/correct`). Offene Beträge werden verrechnet, bereits gezahlte Beträge landen immer als Guthaben im Kundenkonto. Schlägt ein Teil fehl, wird die gesamte Operation zurückgerollt. ## Kündigung widerrufen Die Kündigung eines Abonnements kann solange widerrufen werden, bis der Kündigungszeitpunkt erreicht ist. Bei Widerruf der Kündigung wird das Abonnement fortgesetzt und der Service wird wie gewohnt abgerechnet. Gehe zu [Abonnements](https://app.fynn.eu/subscriptions) und öffne das gewünschte Abonnement. Klicke im Menü oben Rechts auf `Kündigung widerrufen`. Bei Widerruf wird der Kunde nicht benachrichtigt. Der Widerruf der Kündigung erfolgt sofort und das Abonnement wird fortgesetzt. Klicke auf `Kündigung widerrufen`, um die Kündigung zu widerrufen. Anschließend wird die Kündigung widerrufen und das Abonnement fortgesetzt. Verwende hierfür den Kündigung widerrufen Endpunkt. ```bash theme={null} PUT /subscriptions/{id}/revoke-cancellation ``` ## Kündigung während Testphase Abonnements die sich in einer Testphase befinden, können jederzeit gekündigt werden. Die Kündigung einer Testphase führt dazu, dass das Abonnement sofort beendet wird. Um eine Testphase zu kündigen, wähle die Option `Sofort` aus und bestätige die Kündigung. Anschließend wird die Testphase beendet und das Abonnement wird sofort gekündigt. ## Kündigung während Testphase durch Kunden Kunden haben die Möglichkeit, eine Testphase jederzeit im Kundenbereich zu kündigen. Weitere Details erfährst du unter [Testphasen](/guide/subscriptions/trials). # Abonnement erstellen Source: https://docs.fynn.eu/guide/subscriptions/create Erstelle neue Abonnements für deine Kunden In Fynn können Abonnements über die Web-App erstellt werden. Hierbei können verschiedene Optionen und Einstellungen für das Abonnement festgelegt werden. Klicke hierzu auf das "+" Symbol in der oberen rechten Ecke und wähle `Abonnement` aus. Abonnement erstellen Konfiguriere das Abonnement mit den gewünschten Einstellungen und Optionen. Hierbei können verschiedene Einstellungen und Optionen festgelegt werden, wie z.B.: * **Kunden**: Wähle den Kunden aus, dem das Abonnement zugeordnet werden soll. * **Produkte**: Wähle die Produkte aus, die im Abonnement enthalten sein sollen. * **Abrechnungszeitpunkt**: Wähle den Abrechnungszeitpunkt aus, zu dem das Abonnement abgerechnet werden soll. * **Laufzeit**: Wähle die Laufzeit des Abonnements aus. Klicke auf `Produkt hinzufügen`, um die gewünschten Produkte auszuwählen, die im Abonnement enthalten sein sollen. Wähle aus der Liste die gewünschten Produkte aus und klicke auf `Hinzufügen`, um die Produkte dem Abonnement hinzuzufügen. Produkte hinzufügen Sofern ein Produkt mehrere Preise enthält, kannst du hier die gewünschten Preise auswählen, die im Abonnement enthalten sein sollen. Produkt-Preise konfigurieren Anschließend werden die Produkte dem Abonnement hinzugefügt und du kannst die Mengen und weitere Einstellungen für die Produkte festlegen. Produkte hinzugefügt Passe die Abrechnungsdetails an: * **Vertragsstart**: Der Vertragsstart ist relevant zur Berechnung von Kündigungsfristen und nächstmögliche Kündigungszeitpunkte, in Zusammenhang mit den Laufzeiten des Abonnements. * **Abrechnungsbeginn**: Der Abrechnungsbeginn ist der Zeitpunkt, zu dem das Abonnement abgerechnet wird. Standardmäßig entspricht dies dem Vertragsstart. Wird das Abonnement jedoch bspw. aus einem Bestandsystem migriert, ist hier der Zeitpunkt anzugeben, zu dem das Abonnement das nächste Mal abgerechnet werden soll. Ab diesem Zeitpunkt wird das Abrechnungsinterval festgelegt. * **Vertragsende**: Ist bereits zu Beginn des Abonnements bekannt, wann das Abonnement enden soll, kann hier das Vertragsende angegeben werden. Andernfalls kann ein Abonnement zukünftig manuell gekündigt werden. Abrechnungsdetails anpassen Passe die erweiterten Abrechnungsdetails an: * **Bestellnummer/ PO-Nummer**: Gebe hier die Bestellnummer oder PO-Nummer an, die dem Abonnement zugeordnet werden soll. Die PO-Nummer wird immer auf der Rechnung angezeigt. * **Abrechnungsgruppe**: Mit Hilfe der Abrechnungsgruppe kannst du mehrere Abonnements zu einer Gruppe zusammenfassen. Somit werden die Abonnements gemeinsam abgerechnet und auf einer Rechnung zusammengefasst. Weitere Details findest du unter [Abrechnungsgruppen](/guide/subscriptions/billing-groups). * **Abonnementnummer**: Standardmäßig wird die Abonnementnummer automatisch generiert. Du kannst hier jedoch eine eigene Abonnementnummer angeben. * **Individueller Name**: Gebe hier einen individuellen Namen für das Abonnement an. Dieser Name wird auf der Rechnung und in der Abonnementübersicht angezeigt. Standardmäßig wird die Abonnementnummer als Name verwendet. * **Externe ID**: Gebe hier eine externe ID an, die dem Abonnement zugeordnet werden soll. Diese ID wird in der API und im Webhook verwendet, um das Abonnement zu identifizieren. Erweiterte Abrechnungsdetails anpassen Passe die Laufzeiten des Abonnements an. Du kannst beliebig viele Laufzeiten hinzufügen und die Kündigungsfristen anpassen. * **Vertragslaufzeit**: Wähle die Vertragslaufzeit des Abonnements aus. Standardmäßig wird die Vertragslaufzeit auf 1 Jahr festgelegt. * **Kündigungsfrist**: Wähle die Kündigungsfrist des Abonnements aus. Standardmäßig wird die Kündigungsfrist auf 14 Tage festgelegt. Diese Fristen können individuell für jedes Abonnement angepasst werden und sind releveant für die Berechnung des nächstmöglichen Kündigungszeitpunktes. Laufzeiten anpassen Überprüfe das Abonnement und klicke auf `Abonnement starten`, um das Abonnement zu erstellen. Anschließend wird das Abonnement erstellt und abgerechnet. Alternativ kannst du: * das Abonnement auch als Entwurf speichern und zu einem späteren Zeitpunkt erstellen * eine Testphase aktivieren * ein Angebot für das Abonnement erstellen Verwende hierfür den [Abonnement erstellen](/api-reference/subscription/create-subscription) Endpunkt. ```bash theme={null} POST /subscriptions ``` ## Abrechnungsstart anpassen Der Abrechnungsstart ist der Zeitpunkt, zu dem das Abonnement erstmalig abgerechnet wird. Standardmäßig entspricht der Abrechnungsstart dem Vertragsstart. Wird das Abonnement jedoch bspw. aus einem Bestandsystem migriert, ist hier der Zeitpunkt anzugeben, zu dem das Abonnement das nächste Mal abgerechnet werden soll. Ab diesem Zeitpunkt beginnt das Abrechnungsinterval. Wird der Abrechnungsstart in die Vergangenheit gesetzt, wird das Abonnement rückwirkend abgerechnet. Die Abrechnung aller vegangenen Abrechnungszyklen erfolgt sofort und innerhalb einer Rechnung. Anschließend wird das Abonnement zum nächsten Abrechnungszeitpunkt abgerechnet. # Abonnements Source: https://docs.fynn.eu/guide/subscriptions/introduction Erstelle und verwalte deine Abonnements Abonnements sind das Herzstück der wiederkehrenden Abrechnung in Fynn. Mit Abonnements kannst du flexible Abrechnungsmodelle für deine Kunden erstellen und verwalten. Erstelle neue Abonnements mit Produkten, Preisen und individuellen Laufzeiten. Aktiviere Abonnements und wähle Positionen und Abrechnungsstart aus. Kündige Abonnements und verwalte Kündigungsfristen. Pausiere Abonnements vorübergehend und setze sie fort. Fasse mehrere Abonnements zu einer gemeinsamen Rechnung zusammen. ## Status-Übersicht Jedes Abonnement durchläuft einen definierten Lebenszyklus. Der aktuelle Status bestimmt, ob und wie ein Abonnement abgerechnet wird. | Status | Bedeutung | | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- | | `draft` | Entwurf: Das Abonnement ist noch nicht aktiv und wird nicht abgerechnet. | | `active` | Aktiv: Das Abonnement wird regulär abgerechnet. | | `paused` | Pausiert: Die Abrechnung ist vorübergehend ausgesetzt. | | `cancelled` | Gekündigt: Die Kündigung wurde eingeleitet. Die Abrechnung läuft bis zum Kündigungsdatum weiter, danach wechselt der Status automatisch zu `terminated`. | | `terminated` | Beendet: Endgültig beendet, keine weitere Abrechnung. Wird automatisch gesetzt, wenn das Kündigungsdatum oder Vertragsende erreicht ist. | | `voided` | Storniert: Das Abonnement wird aus allen Statistiken entfernt. Dies ist der stärkste "Lösch"-Status. | ### Cancelled vs. Terminated Diese beiden Status werden häufig verwechselt, unterscheiden sich aber grundlegend: **Cancelled** bedeutet, dass eine Kündigung eingeleitet wurde. Das Abonnement wird bis zum Kündigungsdatum weiter abgerechnet. * Wird über die API via `PUT /subscriptions/{id}/cancel` ausgelöst * Solange das Kündigungsdatum in der Zukunft liegt, kann die Kündigung widerrufen werden (siehe [Kündigung widerrufen](/guide/subscriptions/cancel#kündigung-widerrufen)) * Nach Erreichen des Kündigungsdatums wechselt der Status automatisch zu `terminated` **Terminated** bedeutet, dass das Abonnement endgültig beendet ist. Es erfolgt keine weitere Abrechnung. * Wird automatisch vom System gesetzt, wenn das Kündigungsdatum oder Vertragsende erreicht ist * Kann nicht rückgängig gemacht werden ### Kündigungsdatum Bei der Kündigung wird ein Kündigungsdatum festgelegt. Bis zu diesem Datum läuft die Abrechnung weiter. Es gibt drei Optionen: | Typ | Bedeutung | | --------------- | -------------------------------------- | | `immediate` | Sofort wirksam | | `next_possible` | Zum Ende der laufenden Vertragsperiode | | `custom` | Zu einem frei gewählten Datum | Der Ablauf nach einer Kündigung: 1. Die Kündigung wird erfasst, der Status wechselt zu `cancelled` und das Kündigungsdatum wird gesetzt 2. Die Abrechnung läuft bis zum Kündigungsdatum weiter 3. Nach Erreichen des Kündigungsdatums wird der Status automatisch auf `terminated` gesetzt Wenn du per API prüfen möchtest, ob ein Kunde aktiv gekündigt hat, ist `cancelled` der relevante Status. `terminated` zeigt lediglich an, dass das Abonnement endgültig beendet ist. ## Total Contract Value (TCV) Der Total Contract Value (TCV) ist der Gesamtwert eines Abonnements über die gesamte Erst-Vertragslaufzeit. Der TCV ist ein wichtiger Indikator für den Wert eines Abonnements und wird häufig zur Bewertung von Abonnements verwendet. Der TCV wird berechnet, indem der wiederkehrende Umsatz eines Abonnements über die gesamte Erst-Vertragslaufzeit summiert wird. Zudem werden Einmal-Zahlungen und Rabatte berücksichtigt. Beispiel: Ein Abonnement hat einen monatlichen Preis von 100€ und eine Vertragslaufzeit von 12 Monaten. Der TCV beträgt somit 1.200€. Wenn das Abonnement einen Rabatt von 10% auf die ersten 3 Monate erhält, beträgt der TCV 1.080€. Wird innerhalb der 1. Vertragslaufzeit ein Einmal-Zahlung von 100€ hinzugefügt (bspw. durch Consulting) beträgt der TCV 1.180€. Wird anschleßend innerhalb der 1. Vertragslaufzeit ein Upgrade auf ein höherwertiges Abonnement durchgeführt, wird der TCV entsprechend angepasst. Sind in einem Abonnement mehrere Währungen enthalten, wird der TCV in der Standard-Währung des Tenants nach dem aktuell gültigen EZB-Wechselkurs berechnet. # Abonnement pausieren Source: https://docs.fynn.eu/guide/subscriptions/pause Pausiere Abonnements vorübergehend und setze sie fort In Fynn können Abonnements pausiert werden, wodurch die Abrechnung vorübergehend gestoppt wird. Das Pausieren von Abonnements ermöglicht es Kunden, vorübergehend Kosten zu sparen, wenn sie den Service nicht nutzen. Es ist auch eine gute Möglichkeit, Kunden zu behalten, die den Service vorübergehend nicht mehr benötigen, aber nicht kündigen möchten. Verwende hierfür den [Abonnement pausieren](/api-reference/subscription/pause-subscription) Endpunkt. ```bash theme={null} PUT /subscriptions/{id}/pause ``` ## Abonnement fortsetzen Abonnements können jederzeit fortgesetzt werden. Bei der Reaktivierung des Abonnements hast du die Möglichkeit, anzugeben, ob alle fälligen Abrechnungszyklen seit der Pausierung abgerechnet werden sollen oder ob diese ignoriert werden sollen und ein neuer Abrechnungszeitpunkt ausgewählt werden soll. Gehe zu [Abonnements](https://app.fynn.eu/subscriptions) und öffne das gewünschte Abonnement. Klicke im Menü oben Rechts auf `Fortsetzen` und wähle die gewünschte Option aus. Abonnement fortsetzen **Optionen:** * **Abrechnung fortsetzen** - Alle ausstehenden Abrechnungszyklen seit der Pausierung werden sofort abgerechnet, und der Abrechnungszeitpunkt erfolgt wie gewohnt. * **Bisherige Abrechnungen ignorieren** - Die ausstehenden Abrechnungszyklen seit der Pausierung werden ignoriert, und der Abrechnungszeitpunkt wird entsprechend des "Neues Startdatum" festgelegt. Ein Beispiel für beide Optionen findest du weiter unten. Klicke auf `Abrechnung fortsetzen`, um die Reaktivierung abzuschließen. Anschließend wird das Abonnement fortgesetzt und die Abrechnung entsprechend durchgeführt. Verwende hierfür den [Abonnement fortsetzen](/api-reference/subscription/resume-subscription) Endpunkt. ```bash theme={null} PUT /subscriptions/{id}/resume ``` ## Beispiel | Zeitpunkt | Beschreibung | | ------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Abrechnungszyklus 1 | 01.01.2023 - 31.01.2023 | | Abrechnungszyklus 2 | 01.02.2023 - 28.02.2023 | | Abrechnungszyklus 2 | 01.03.2023 - 31.03.2023 | | Pausierung | Das Abonnement wird pausiert am 15.01.2023, nachdem der erste Abrechnungszyklus vollständig abgeschlossen wurde. | | Reaktivierung | Das Abonnement wird am 15.04.2023 fortgesetzt. | | Reaktivierung - Abrechung fortsetzen | Es werden 2 Abrechnungszyklen abgerechnet: 01.02.2023 - 28.02.2023 und 01.03.2023 - 31.03.2023. Der nächste Abrechnungszeitpunkt wird auf den 01.04.2023 festgelegt. | | Reaktivierung - Bisherige Abrechnungen ignorieren | Der neue Abrechnungszeitpunkt wird auf den 01.04.2023 festgelegt. Damit werden die ausstehenden Abrechnungszyklen seit der Pausierung ignoriert und die Abrechnung beginnt mit dem Zyklus 01.04.2023 - 30.04.2023, 01.05.2023 - 31.05.2023, usw. | # Abrechnung zurücksetzen Source: https://docs.fynn.eu/guide/subscriptions/reset-billing Setze die Abrechnung ausgewählter Abo-Positionen auf ein neues Startdatum zurück Wurde ein Abonnement mit falscher Konfiguration oder zum falschen Zeitpunkt abgerechnet, kannst du die Rechnung stornieren und die Abrechnung der betroffenen Positionen anschließend auf ein Datum deiner Wahl zurücksetzen. Ab diesem Tag werden die Positionen wieder ganz normal abgerechnet. ## Voraussetzungen * Die Position ist **nicht beendet**. Alle anderen Positionen kannst du zurücksetzen. * Die Position ist **nicht verbrauchsbasiert**. Positionen mit gemessenem Verbrauch können nicht zurückgesetzt werden. * Alle Rechnungen, die einen Zeitraum ab dem gewählten Datum abdecken, sind **vollständig storniert**. Solange eine dieser Rechnungen noch offen ist, wird der Reset mit einer Fehlermeldung abgelehnt. Der Reset ist eine reine Zustandsänderung: Er erstellt keine Gutschrift, storniert keine Belege und bewegt kein Geld. Belege stornierst oder gutschreibst du manuell in einem eigenen Schritt. ## Abrechnung zurücksetzen 1. Öffne das Abonnement und wähle im Aktionsmenü **Abrechnung zurücksetzen**. 2. Wähle das Datum, ab dem wieder abgerechnet werden soll. 3. Wähle die Positionen aus, die zurückgesetzt werden sollen. 4. Bestätige mit **Abrechnung zurücksetzen**. Die ausgewählten Positionen gelten danach als bis zum gewählten Datum nicht abgerechnet. Der nächste Rechnungslauf erstellt eine neue Rechnung, deren Leistungszeitraum am gewählten Datum beginnt. ## Was passiert beim Reset? * Der Abrechnungszustand der ausgewählten Positionen wird auf das gewählte Datum gesetzt. Das Datum wird in der Zeitzone deiner Organisation interpretiert. * Der alte Rechnungslauf der stornierten Rechnung blockiert die erneute Abrechnung nicht mehr, bleibt aber zur Nachvollziehbarkeit erhalten. * Wenn eine Position noch keine gültige Abrechnungshistorie hat, wird auch die Umsatzerkennung (MRR) der Position auf das neue Datum verschoben. Bereits gültig abgerechnete Zeiträume bleiben unverändert. * Der Reset wird als Aktivität am Abonnement protokolliert. Typischer Ablauf aus der Praxis: Ein Abonnement wurde versehentlich zu früh abgerechnet. Storniere die Rechnung, setze die Abrechnung der Positionen auf den gewünschten Starttermin zurück und der nächste Rechnungslauf erstellt automatisch die korrekte Rechnung. # Abonnement-Übergänge Source: https://docs.fynn.eu/guide/subscriptions/transitions Wechsle Produkte und Preispläne in einem Abonnement mit automatischer Proration und Gutschriften. Mit Abonnement-Übergängen kannst du die Produkte und Preispläne eines bestehenden Abonnements ändern - z.B. für Upgrades, Downgrades oder Produktwechsel. Die Änderungen werden sauber verarbeitet mit automatischer Berechnung von Gutschriften und anteiliger Abrechnung. Gekündigte Abonnements können nicht mehr transitioniert werden. Der Übergangszeitpunkt muss in der Zukunft oder jetzt sein. ## Anwendungsfälle | Szenario | Beschreibung | | ------------------ | ----------------------------------------------------------- | | **Upgrade** | Kunde wechselt von Basic auf Pro Plan | | **Downgrade** | Kunde wechselt auf einen günstigeren Plan | | **Produktwechsel** | Wechsel von einem Produkt zu einem anderen | | **Planänderung** | Gleiche Produkte, aber andere Preispläne | | **Migration** | Umstellung von nutzungsbasiert auf Festpreis oder umgekehrt | *** ## So funktioniert es Ein Übergang führt folgende Schritte aus: 1. **Alte Items beenden** - Bestehende Abonnement-Items werden zum Übergangszeitpunkt beendet 2. **Gutschriften erstellen** - Optional werden Gutschriften für nicht genutzte Zeit erstellt 3. **Neue Items anlegen** - Die gewünschten Produkte werden als neue Items hinzugefügt 4. **Phase wechseln** - Eine neue Abonnement-Phase beginnt *** ## Proration (Gutschriften) Bei der Beendigung von Festpreis-Produkten kannst du wählen, wie Gutschriften berechnet werden: | Option | Beschreibung | | ------------------------------- | -------------------------------------------- | | **Anteilig** (`creditProrated`) | Gutschrift basierend auf verbleibenden Tagen | | **Keine** (`none`) | Keine Gutschrift | Die Gutschrift wird sofort finalisiert und an den Kunden gesendet. Der Guthabenbetrag wird automatisch mit der nächsten Rechnung verrechnet. Bei nutzungsbasierten Produkten werden **keine Gutschriften** erstellt, da diese im Nachhinein abgerechnet werden. Stattdessen wird die Nutzung bis zum Übergangszeitpunkt mit dem alten Preisplan abgerechnet. *** ## Abrechnungszeitpunkt Du kannst festlegen, wann die neuen Items abgerechnet werden: | Option | Beschreibung | | ------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------- | | **Phasenstart** (`phaseStart`) | Rechnung wird zum Übergangszeitpunkt erstellt. Teilperioden von nutzungsbasierten Items werden ebenfalls zu diesem Zeitpunkt abgerechnet. | | **Sofort** (`immediately`) | Rechnung wird sofort erstellt. Teilperioden von nutzungsbasierten Items werden ebenfalls sofort abgerechnet. | *** ## Nutzungsbasierte Produkte Bei nutzungsbasierten Produkten gibt es besondere Regeln: ### Keine Gutschriften Nutzungsbasierte Produkte werden **nie** gutgeschrieben, da sie im Nachhinein abgerechnet werden. Die Proration-Einstellung wird ignoriert. ### Teilperioden-Abrechnung Wenn ein nutzungsbasiertes Item beendet wird, erstellt das System automatisch Abrechnungsposten für die Teilperiode: * **Zeitraum**: Letzte Abrechnung → Übergangszeitpunkt * **Preis**: Alter Preisplan * **Inklusiveinheiten**: Werden anteilig berechnet **Beispiel:** * Letzter Abrechnungszeitpunkt: 1. Februar * Übergangszeitpunkt: 15. Februar * Die Nutzung vom 1.-15. Februar wird mit dem alten Preisplan abgerechnet * Ab 15. Februar gilt der neue Preisplan ### Wechsel zwischen Produkttypen | Von | Nach | Gutschrift | Teilperiode | | --------------- | --------------- | ------------- | ----------- | | Festpreis | Festpreis | Ja (optional) | Nein | | Festpreis | Nutzungsbasiert | Ja (optional) | Nein | | Nutzungsbasiert | Festpreis | Nein | Ja | | Nutzungsbasiert | Nutzungsbasiert | Nein | Ja | *** ## API Für Übergänge steht folgender API-Endpoint zur Verfügung: | Method | Endpoint | Beschreibung | | ------ | ------------------------------------ | -------------------- | | POST | `/api/subscriptions/[id]/transition` | Übergang durchführen | Vollständige API-Dokumentation mit Request/Response-Strukturen und Beispielen *** ## Verwandte Dokumentation Grundlagen zu Abonnements Nutzungsbasierte Abrechnung konfigurieren # Aktivitätsprotokoll Source: https://docs.fynn.eu/guide/tenant/activities Verfolge Aktivitäten und hinterlasse Kommentare zu wichtigen Ereignissen. Der Aktivitäts-Stream bietet eine zentrale Übersicht über alle Änderungen, Ereignisse und Kommentare, die vorgenommen wurden. So behältst du jederzeit den Überblick, wer was wann getan hat. Aktivitätsprotokoll - Kommentare ## Unterstützte Objekte Folgende Objekte werden im Aktivitäts-Stream unterstützt: * **Abonnements**: Änderungen an Abonnements, z. B. Statuswechsel, Laufzeitanpassungen. * **Rechnungen**: Änderungen an Rechnungen, wie Statusänderungen (z. B. bezahlt, storniert). * **Gutschriften**: Änderungen an Gutschriften, wie Statusänderungen (z. B. bezahlt, storniert). * **Stornos**: Änderungen an Stornos, wie Statusänderungen (z. B. bezahlt, storniert). * **Kunden**: Verfolgen von Kundeninformationen wie Name, Adresse, etc. * **Produkte**: Änderungen an Produkten, z. B. Preise, Details oder Attribute. Der Aktivitäts-Stream ist erst seit dem 17.Dez 2024 verfügbar, alle Änderungen vor diesem Datum sind nicht im Aktivitäts-Stream verfügbar. Für den vorherigen Zeitraum wurden die Änderungen intern protokolliert. ## Kommentare hinterlassen Zu jedem unterstützten Objekt kannst du Kommentare hinzufügen, um zusätzliche Informationen oder Anmerkungen zu hinterlassen. Kommentare sind besonders nützlich für: * Interne Abstimmungen: Notiere wichtige Details oder kläre Fragen direkt am Objekt. * Protokollierung: Hinterlasse eine Erklärung zu Änderungen, wie z. B. warum eine Rechnung storniert wurde. * Zusammenarbeit: Kommentiere mit deinem Team direkt im Kontext. Kommentare können aktuell nicht bearbeitet oder gelöscht werden. Wir arbeiten daran, diese Funktion in Zukunft zu ermöglichen. Um Kommentare zu einem Objekt hinzuzufügen, kann einer der folgenden Endpunkte verwendet werden: * [Kunde: Kommentar hinzufügen](/api-reference/customer/add-comment) * [Abonnement: Kommentar hinzufügen](/api-reference/subscription/add-comment) * [Rechnung: Kommentar hinzufügen](/api-reference/invoice/add-comment) # Aussehen & Design Source: https://docs.fynn.eu/guide/tenant/appearance Passe das Aussehen und Design des Warenkorbs, Kundenbereich und Dokumenten an. Passe das Aussehen und Design des Warenkorbs, Kundenbereichs und Dokumente an, um deine Marke optimal zu präsentieren. ## Logo Dein Logo wird für (PDF)-Dokumente, E-Mails, den Kundenbereich und den Warenkorb verwendet. Wir empfehlen eine transparente PNG- oder SVG-Datei für eine optimale Darstellung. ## Unternehmens-Farbe Die Unternehmensfarbe wird für (PDF)-Dokumente, E-Mails, den Kundenbereich und den Warenkorb verwendet. Wähle eine Farbe, die deine Marke am besten repräsentiert und einheitlich in allen Bereichen erscheint. ## Akzent-Farbe Die Akzentfarbe wird für (PDF)-Dokumente, E-Mails, den Kundenbereich und den Warenkorb verwendet. Sie dient dazu, wichtige Elemente hervorzuheben und das Design ansprechender zu gestalten. ## Aussehen anpassen Gehe hierzu zu [Einstellungen > Allgemein](https://app.fynn.eu/settings) und scrolle nach unten zu "Aussehen". Aussehen anpassen ## Beleg Vorschau Die Vorschau von Belegen (Rechnungen, Stornos, Gutschriften) erhaltet man wie folgt: Gehe hierzu zu [Einstellungen > Belege](https://app.fynn.eu/settings/invoices) und scrolle nach unten zu "Vorlagen". Klicke auf Bearbeiten der "Rechnung" oder "Storno" oder "Gutschrift" Vorlage, und wähle "Deutsch bearbeiten" aus. Beleg-Einstellungen Klicke hierfür auf den Tab "Vorschau" um dir die Vorschau anzusehen. Vorschau # Abrechnung Source: https://docs.fynn.eu/guide/tenant/billing Verwalte deine Abrechnung, Rechnungen und Zahlungen. Passe die Abrechnungseinstellungen an, um die Darstellung und den Ablauf der Rechnungsstellung für deine Kunden zu steuern. Du kannst u.a. entscheiden, ob Rechnungen manuell freigegeben werden müssen, wie Preise angezeigt werden und ob erweiterte Details sichtbar sind. ## Fälligkeit Lege die Standard-Fälligkeit von Rechnungen in Tagen fest. Diese Einstellung wird für alle Kunden übernommen, sofern sie nicht individuell angepasst wurde. ## Manuelle Freigabe Aktiviere diese Option, wenn Rechnungen manuell freigegeben werden müssen. ## 0,00 € Belege generieren Wenn diese Option aktiviert ist, werden auch Belege über 0,00 € generiert. Andernfalls werden sie unterdrückt. Dies kann nützlich sein, um Transparenz zu schaffen oder um sicherzustellen, dass alle Transaktionen dokumentiert sind. ## Abrechnungsdetails Zeigt eine Verlinkung zu erweiterten Abrechnungs-Details in den Rechnungen an. Diese Funktion erhöht die Transparenz und hilft dem Kunden, die abgerechneten Leistungen besser zu verstehen. ## GiroCode Fynn GiroCode Der GiroCode ist ein QR-Code, der es deinen Kunden ermöglicht, Rechnungen einfach zu bezahlen. Dieser Code enthält alle notwendigen Zahlungsinformationen und kann mit einer Banking-App gescannt werden. ## Preise Aktiviere diese Option, um zusätzlich den Preis pro Einheit (z.B. pro Monat oder Stück) anzuzeigen – zusätzlich zum Gesamtpreis. Beispiel: 10,00 € / Monat / Stück ## Positionsgruppen-Format Bestimmt, wie die Positionsgruppen auf Rechnungen benannt werden. Das Format unterstützt Abonnement-Variablen sowie Bedingungen. **Standardformat:** ``` {{ subscription.name }}{% if subscription.poNumber %} - PO Number: {{ subscription.poNumber }}{% endif %} ``` Verfügbare Variablen: `subscription.name`, `subscription.number`, `subscription.poNumber`, `subscription.customFields.`. Die Eingabe bietet Autovervollständigung für verfügbare Variablen und zeigt eine Live-Vorschau des formatierten Gruppennamens an. Weitere Details und Beispiele findest du unter [Belegvorlagen](/guide/invoices/document-templates). ## Kundenguthaben (Wallet) Steuere, wie Fynn mit Überzahlungen und vorhandenem Kundenguthaben umgeht. ### Überzahlungen als Guthaben verbuchen Wenn diese Option aktiviert ist, wird der überschüssige Betrag bei einer Überzahlung automatisch dem Kundenguthaben gutgeschrieben. Der offene Rechnungsbetrag wird dabei automatisch auf null gesetzt, und das Guthaben steht für zukünftige Rechnungen zur Verfügung. Ist die Option deaktiviert, bleibt eine Überzahlung als Differenz bestehen und muss manuell verarbeitet werden. ### Guthaben automatisch auf offene Rechnungen anrechnen Wenn aktiviert, wird vorhandenes Kundenguthaben automatisch auf offene Rechnungen angerechnet. Die Verrechnung beginnt bei der ältesten fälligen Rechnung und arbeitet sich chronologisch vor. Diese Einstellung ist standardmäßig aktiviert. Du kannst sie global deaktivieren oder pro Kunde individuell unter **Kunden > Einstellungen** überschreiben. Beide Einstellungen können pro Kunde individuell überschrieben werden. Mehr dazu unter [Kundenguthaben](/guide/invoices/wallet-balance). ## Abrechnung deaktivieren Diese Funktion deaktiviert die Abrechnung aller Abonnements. Es werden keine neuen Rechnungen mehr erstellt oder versendet. Diese Option ist besonders nützlich, wenn Migrationen durchgeführt werden. ⸻ Einstellungen anpassen Gehe hierzu zu [Einstellungen > Abrechnung](https://app.fynn.eu/settings/billing). Aktiviere oder deaktiviere die gewünschten Funktionen wie z.B. "Manuelle Freigabe", "GiroCode anzeigen" oder "0,00 € Belege generieren". Abrechnungseinstellungen Speichere deine Änderungen oben rechts. Möchtest du noch weitere Abschnitte wie „Rechnungsnummern“, „Steuern“ oder „Währungen“ dokumentieren? # Erste Konfiguration Source: https://docs.fynn.eu/guide/tenant/configure Richte Fynn ein und beginne mit der Abrechnung deiner Produkte und Dienstleistungen Willkommen bei Fynn! Diese Anleitung führt dich durch die ersten Schritte, um dein Unternehmen einzurichten und mit der Abrechnung zu beginnen. Fynn Setup Checkliste ## Grundlegende Schritte Diese Schritte sind notwendig, um Fynn vollumfänglich nutzen zu können. ### Unternehmen vervollständigen Dieser Schritt ist **notwendig**, um Rechnungen erstellen zu können. Vervollständige deine Unternehmensdaten, damit diese korrekt auf deinen Rechnungen erscheinen. Gehe zu [Einstellungen > Organisation](https://app.fynn.eu/settings/organization) Fülle folgende Informationen aus: * **Firmenname**: Der vollständige Name deines Unternehmens * **Adresse**: Straße, Hausnummer, PLZ, Ort und Land * **Steuernummer / USt-IdNr.**: Für die korrekte Rechnungsstellung * **E-Mail-Adresse**: Kontakt-E-Mail für deine Kunden * **Telefonnummer**: Optional, aber empfohlen Lade dein Unternehmenslogo hoch. Dieses wird auf Rechnungen, im Kundenportal und in E-Mails angezeigt. Klicke auf **Speichern**, um deine Änderungen zu übernehmen. ### Zahlungsmethoden hinzufügen Dieser Schritt ist **notwendig**, um Zahlungen von deinen Kunden einziehen zu können. Richte mindestens eine Zahlungsmethode ein, um Zahlungen von deinen Kunden zu akzeptieren. Verbinde einen oder mehrere Zahlungsanbieter mit Fynn: Automatischer Bankeinzug für wiederkehrende Zahlungen. Kreditkarten und weitere Zahlungsmethoden. Beliebte Online-Zahlungsmethode. Klassische Banküberweisung. Gehe zu [Einstellungen > Zahlungsmethoden](https://app.fynn.eu/settings/payment-methods) und aktiviere die gewünschten Zahlungsmethoden für deine Kunden. [Mehr zur Konfiguration der Zahlungsmethoden](/guide/tenant/payment-methods) ### Mitarbeiter einladen Lade dein Team ein, um gemeinsam mit Fynn zu arbeiten. Gehe zu [Einstellungen > Benutzer](https://app.fynn.eu/settings/users) Klicke auf das **+** Symbol und gib die E-Mail-Adresse des neuen Benutzers ein. Wähle eine passende Rolle für den Benutzer: * **Administrator**: Voller Zugriff auf alle Funktionen und Einstellungen * **Buchhaltung**: Zugriff auf Rechnungen, Zahlungen und Buchhaltung * **Benutzer**: Standard-Zugriff auf Kunden, Produkte und Abonnements [Mehr zu Benutzern & Berechtigungen](/guide/tenant/users) *** ## Abrechnung beginnen Beginne mit der Abrechnung deiner Produkte und Dienstleistungen mit nur wenigen Klicks. ### Produkt anlegen Erstelle dein erstes Produkt im Katalog. Gehe zu [Katalog > Produkte](https://app.fynn.eu/catalogue/products) Klicke auf **+ Produkt erstellen** und fülle die Produktdetails aus: * **Name**: Der Name des Produkts * **Beschreibung**: Eine kurze Beschreibung * **Preis**: Der Verkaufspreis * **Abrechnungsintervall**: Monatlich, jährlich oder einmalig Nutze [Produktgruppen](/guide/catalogue/product-groups), um ähnliche Produkte zu organisieren und Upgrades/Downgrades zu ermöglichen. [Mehr zur Produktverwaltung](/guide/catalogue/products) ### Kunde anlegen Lege deinen ersten Kunden an. Gehe zu [Kunden](https://app.fynn.eu/customers) Klicke auf **+ Kunde erstellen** und fülle die Kundendaten aus: * **Name**: Firmenname oder Privatperson * **E-Mail-Adresse**: Für Rechnungsversand und Kommunikation * **Adresse**: Rechnungsadresse * **Zahlungsmethode**: Die bevorzugte Zahlungsmethode [Mehr zur Kundenverwaltung](/guide/customers/introduction) ### Abonnement erstellen Erstelle dein erstes Abonnement für einen Kunden. Öffne den gewünschten Kunden und klicke auf **+ Abonnement erstellen**. Wähle die Produkte aus, die der Kunde abonnieren möchte. Wähle das Startdatum und bestätige das Abonnement. Nach dem Erstellen des Abonnements wird automatisch eine Rechnung generiert und an den Kunden versendet. [Mehr zu Abonnements](/guide/subscriptions/introduction) *** ## Erweiterte Integration Integriere deine Anwendung mit Fynn und nutze die umfangreichen Möglichkeiten der API. ### Webhooks einrichten Mit Webhooks wirst du in Echtzeit über Ereignisse in Fynn informiert. Gehe zu [Einstellungen > Webhooks](https://app.fynn.eu/settings/webhooks) Klicke auf **+ Webhook erstellen** und konfiguriere: * **URL**: Die Endpunkt-URL deiner Anwendung * **Ereignisse**: Wähle die Ereignisse, über die du informiert werden möchtest [Mehr zu Webhooks](/guide/webhooks/introduction) ### API-Schlüssel generieren Erstelle API-Schlüssel, um programmatisch auf Fynn zuzugreifen. Gehe zu [Einstellungen > API-Schlüssel](https://app.fynn.eu/settings/api-tokens) Klicke auf **+ API-Schlüssel erstellen** und vergib einen Namen. Der API-Schlüssel wird nur einmal angezeigt. Speichere ihn sicher ab, da er nicht erneut abgerufen werden kann. [API-Referenz](/api-reference) *** ## Nächste Schritte Verbinde Fynn mit DATEV für automatische Buchhaltung. Automatisiere den Umgang mit überfälligen Zahlungen. Erstelle Checkout-Links für den Direktverkauf. Passe das Self-Service-Portal für deine Kunden an. # Währungen Source: https://docs.fynn.eu/guide/tenant/currencies Währungen verwalten und automatisch umrechnen In Fynn kannst du ganz einfach verschiedene Währungen für deine Abrechnungen einrichten. Standardmäßig ist die Währung auf Euro eingestellt. Automatische Währungsumrechnung
Es können mehrere Währungen in einer Rechnung verwendet werden. Die Umrechnung erfolgt automatisch auf Basis des aktuellen EZB-Wechselkurses. Weitere Details findest unter [Multi-Währungen](/guide/tenant/currencies#multi-waehrungen).
## Währung hinzufügen Um eine neue Währung hinzuzufügen, folge diesen Schritten: Gehe hierzu zu [Einstellungen > Allgemein](https://app.fynn.eu/settings/) Währung hinzufügen ## Standardwährung auswählen Die Standardwährung wird in der Oberfläche vorausgewählt und erleichtert somit die Arbeit. Um die Standardwährung zu ändern, folge diesen Schritten: Gehe hierzu zu [Einstellungen > Allgemein](https://app.fynn.eu/settings/) Standardwährung ändern ## Erlaubte Währungen Erlaubte Währungen sind die Währungen, die in Fynn für die Abrechnung verwendet werden können. Um eine Währung zu entfernen, entferne sie einfach aus der Liste der erlaubten Währungen. Bestehende Belege und Rechnungen werden nicht automatisch umgerechnet, wenn die Währung entfernt wird. Die Währung wird jedoch in der Oberfläche nicht mehr zur Neu-Auswahl angeboten. Erlaubte Währungen ## Multi-Währungen Fynn unterstützt die Verwendung von mehreren Währungen in einer Rechnung. Die Umrechnung erfolgt automatisch auf Basis des aktuellen EZB-Wechselkurses. Die Ziel-Währung entspricht der Währung, die bei der Rechnungs-Anlage ausgewählt wurde. Wurde die Rechnung durch die Abonnement-Abrechnung angelegt, wurde die Währung des Kunden verwendet. Die entsprechenden Währungskurse werden in Echtzeit von der Europäischen Zentralbank (EZB) abgerufen und in der Rechnung tabellarisch dargestellt. Multi-Währungen # Benutzerdefinierte Attribute Source: https://docs.fynn.eu/guide/tenant/custom-fields Erstelle benutzerdefinierte Attribute für verschiedene Objekte. Benutzerdefinierte Attribute ermöglichen es dir, zusätzliche Informationen zu verschiedenen Objekten zu speichern. Diese Attribute können je nach Einstellung sowohl in der API als auch in der Benutzeroberfläche angezeigt und bearbeitet werden. Diese können für Kunden, Produkte und Abonnements definiert werden. Zudem sind folgende Typen von benutzerdefinierten Attributen möglich: * Text * Zahl * Datum * Auswahloptionen * Mehrfachauswahl * Liste * Checkbox (Ja/Nein) ## Use Cases Benutzerdefinierte Attribute können für verschiedene Zwecke verwendet werden, wie z.B.: * Speichern von zusätzlichen Informationen zu Kunden, wie z.B. Geburtsdatum, interne Kundennummer, etc. * Speichern von zusätzlichen Informationen zu Produkten, wie z.B. Hersteller, Gewicht, etc. * Speichern von zusätzlichen Informationen zu Abonnements, wie z.B. Vertragsnummer, etc. * Speichern von erlaubten Features für ein Produkt am Abonnement Dies sind nur einige Beispiele, wie benutzerdefinierte Attribute verwendet werden können. Die Verwendung hängt von den spezifischen Anforderungen deines Unternehmens ab. ## Benutzerdefinierte Attribute erstellen Scrolle nach unten zu "Benutzerdefinierte Attribute". Benutzerdefinierte Attribute erstellen Konfiguriere das Attribut nach deinen Anforderungen. Benutzerdefinierte Attribute konfigurieren ## Benutzerdefinierte Attribute löschen Solltest du ein benutzerdefiniertes Attribut nicht mehr benötigen, kannst du es löschen. Die Daten bleiben erhalten, jedoch wird das Attribut nicht mehr angezeigt und kann nicht mehr bearbeitet werden. ## Benutzerdefinierte Attribute bearbeiten Benutzerdefinierte Attribute können an Kunden, Produkte und Abonnements angehängt werden. Diese können in der Benutzeroberfläche bearbeitet werden. Benutzerdefinierte Attribute setzen ## API verwenden Benutzerdefinierte Attribute können ebenfalls über die API gesetzt und abgerufen werden. Hierzu muss lediglich das `customFields` Feld in den entsprechenden Objekten verwendet werden. ### Auswahloptionen / Mehrfachauswahl Standardmäßig wird als Wert & Anzeigename der Anzeigename als Schlüssel verwendet. Sollte dies nicht gewünscht sein, kann bei Anlage der Benutzerdefinierten Attribute unter dem Punkt `choices` ein Array übergeben werden, wo Wert & Anzeigename definiert werden können. ```json Beispiel JSON Payload theme={null} { "name": "My custom field", "slug": "custom_field", "type": "list", "choices": { "value1": "Anzeigename 1", "value2": "Anzeigename 2" } } ``` # Go-Live Source: https://docs.fynn.eu/guide/tenant/go-live-checklist Best Practices und wichtige Schritte für einen erfolgreichen Produktivstart mit Fynn. Du planst den Go-Live mit Fynn? Diese Checkliste hilft dir, alle wichtigen Vorbereitungen zu treffen und nichts zu vergessen. Für die Produktivumgebung ist ein Vertrag mit unserem Sales-Team erforderlich. [Kontaktiere uns](mailto:sales@fynn.eu) oder [buche einen Termin](https://cal.com/team/fynn/fynn-documentation). Die meisten Einstellungen sind bereits in der [Ersten Konfiguration](/guide/tenant/first-configuration) beschrieben. Diese Checkliste dient als Übersicht für den finalen Go-Live. *** ## Produkte aus der Testumgebung übernehmen Du hast Produkte in der Sandbox-Umgebung konfiguriert? Diese kannst du einfach in die Produktivumgebung importieren: Erstelle in der [Sandbox-Umgebung](https://preview.fynn.eu) unter Einstellungen > API einen API-Token. Gehe in der Produktivumgebung zu [Katalog > Produkte](https://app.fynn.eu/catalogue/products) und wähle im Aktionen-Menü (oben rechts) **Testumgebung Import**. * Gib den API-Token aus der Testumgebung ein * Wähle die Produkte aus, die importiert werden sollen * Ordne benutzerdefinierte Felder zu (neu erstellen oder vorhandene verwenden) * Ordne Kostenstellen zu * Produkte, Preise und Konfigurationen werden kopiert *** ## Zahlungsanbieter (PSP) einrichten ### SEPA-Lastschrift Für den Einzug per SEPA-Lastschrift benötigst du: Beantrage deine Gläubiger-Identifikationsnummer bei der [Deutschen Bundesbank](https://extranet.bundesbank.de/scp/beantragungCI/lizenz.xhtml). Die Beantragung ist online möglich und dauert nur wenige Minuten. Kläre mit deiner Hausbank den SEPA-Verfügungsrahmen (Limits) für Lastschrifteinzüge. Hinterlege deine Bankdaten und Gläubiger-ID unter [Einstellungen > Zahlungsmethoden](https://app.fynn.eu/settings/payment-methods). [Zur SEPA-Anleitung](/integrations/payment-providers/sepa) ### Kreditkarte (Stripe) Du kannst dein Stripe-Konto direkt während der Verbindung in Fynn erstellen. Stripe benötigt Unternehmensdokumente zur Verifizierung (Handelsregisterauszug, Ausweisdokument). **Dauer:** 1-5 Werktage [Zur Stripe-Anleitung](/integrations/payment-providers/stripe) ### PayPal Erstelle ein [PayPal Business-Konto](https://www.paypal.com/de/business) falls noch nicht vorhanden. [Zur PayPal-Anleitung](/integrations/payment-providers/paypal) *** ## Fynn konfigurieren ### Unternehmensdaten Unter [Einstellungen > Organisation](https://app.fynn.eu/settings) hinterlegst du: * Vollständiger Firmenname * Adresse (Straße, PLZ, Ort, Land) * Steuernummer und USt-IdNr. * Kontakt-E-Mail und Telefon * Firmenlogo * Bankverbindung (für Rechnungen) ### Nummernkreise Lege unter [Einstellungen > Nummernkreise](https://app.fynn.eu/settings/number-ranges) fest: * Rechnungsnummern (z.B. `RE-2024-00001`) * Gutschriftennummern * Kundennummern [Mehr zu Nummernkreisen](/guide/tenant/number-ranges) ### E-Mail-Vorlagen Passe unter [Einstellungen > Benachrichtigungen](https://app.fynn.eu/settings/notifications) die E-Mail-Vorlagen an: * Rechnungsversand * Zahlungsbestätigung * Zahlungserinnerung / Mahnung * Willkommens-E-Mail [Mehr zu Benachrichtigungen](/guide/notifications/introduction) ### Dokumentvorlagen Falls du das Layout deiner Dokumente anpassen möchtest, konfiguriere unter [Einstellungen > Aussehen & Design](https://app.fynn.eu/settings/design) die Vorlagen für: * Rechnung * Stornierung * Gutschrift ### Mahnwesen Konfiguriere unter [Einstellungen > Mahnwesen](https://app.fynn.eu/settings/payment-failures) deine Mahnstufen und Fristen. [Mehr zum Mahnwesen](/guide/dunning/introduction) *** ## Zahlungsmethoden aktivieren Nach dem Verbinden der Zahlungsanbieter müssen die gewünschten Zahlungsmethoden unter [Einstellungen > Zahlungsmethoden](https://app.fynn.eu/settings/payment-methods) aktiviert werden. *** ## Kontoabgleich einrichten Für die automatische Zahlungszuordnung verbinde dein Bankkonto unter [Einstellungen > Zahlungsmethoden](https://app.fynn.eu/settings/payment-methods) > **Bankkonto** > **Kontoabgleich**. Eingehende Zahlungen werden automatisch den offenen Rechnungen zugeordnet. *** ## Buchhaltung Falls du eine Buchhaltungssoftware nutzt: * DATEV-Export einrichten * Kontenrahmen prüfen * Erlöskonten zuordnen [Mehr zur Buchhaltung](/guide/accounting/introduction) *** ## Kundenbereich Unter [Einstellungen > Kundenbereich](https://app.fynn.eu/settings/hosted-services) kannst du das Self-Service-Portal für deine Kunden konfigurieren - z.B. welche Funktionen verfügbar sind, Branding und eigene Domain. *** ## Team einladen Lade dein Team unter [Einstellungen > Benutzer](https://app.fynn.eu/settings/users) ein und vergib passende Rollen. Falls du granulare Berechtigungen benötigst, erstelle unter [Einstellungen > Gruppen](https://app.fynn.eu/settings/groups) Benutzergruppen mit spezifischen Rechten. [Mehr zu Benutzerrollen](/guide/tenant/users) *** ## Abrechnungseinstellungen Unter [Einstellungen > Abrechnung](https://app.fynn.eu/settings/billing) kannst du festlegen: * **Manuelle Rechnungsfreigabe**: Rechnungen müssen vor dem Versand manuell freigegeben werden * Automatische Rechnungserstellung und -versand konfigurieren Die manuelle Freigabe ist besonders nützlich, wenn du beim Go-Live volle Kontrolle über die ersten Rechnungen behalten möchtest - zum Beispiel um deine Konfiguration zu verifizieren oder um interne Freigabeprozesse abzubilden. *** ## Vor dem Go-Live testen Teste alle Prozesse in der [Sandbox-Umgebung](https://preview.fynn.eu) bevor du live gehst. Teste mindestens: * Kunde anlegen mit Zahlungsmethode * Abonnement erstellen und aktivieren * Rechnung generieren und versenden * Zahlung einziehen * E-Mail-Vorlagen auf Inhalt und Design prüfen *** ## Checkliste * Produkte aus Testumgebung importiert * Gläubiger-ID beantragt (für SEPA) * SEPA-Verfügungsrahmen mit Bank geklärt (für SEPA) * Zahlungsanbieter verbunden (SEPA, Stripe, PayPal, etc.) * Zahlungsmethoden aktiviert * Kontoabgleich für automatische Zahlungszuordnung eingerichtet * Unternehmensdaten vollständig hinterlegt * Logo hochgeladen * Nummernkreise konfiguriert * E-Mail-Vorlagen angepasst * Dokumentvorlagen angepasst (falls erforderlich) * Abrechnungseinstellungen geprüft (manuelle Freigabe?) * Mahnwesen eingerichtet * Kundenbereich konfiguriert * Buchhaltungsintegration konfiguriert * Team eingeladen und Benutzergruppen erstellt * Testdurchlauf in Sandbox erfolgreich *** ## Häufige Fragen Ja! Unter **Katalog > Produkte > Aktionen > Testumgebung Import** kannst du Produkte, Preise und Konfigurationen aus der Sandbox importieren. Du benötigst dafür einen API-Token aus der Testumgebung. Die Unternehmensverifizierung bei Stripe dauert in der Regel 1-5 Werktage. Stripe benötigt Unternehmensdokumente (Handelsregisterauszug, Ausweisdokument). Starte die Verifizierung rechtzeitig vor dem geplanten Go-Live. Ja, Kunden können mehrere Zahlungsmethoden hinterlegen (z.B. SEPA und Kreditkarte). **Ausnahme:** Pro Kunde kann nur ein PayPal-Konto hinterlegt werden. * **Mandatsprobleme** (MD01, MD02): Zahlungsmethode wird deaktiviert * **Kontoprobleme** (AC01, AC04): Zahlungsmethode wird deaktiviert * **Temporäre Probleme** (AM04, AM05): Automatischer Retry wird geplant * **Regulatorische Probleme** (AG01, RR01): Manuelle Prüfung erforderlich Nein, für die Finalisierung einer Rechnung muss eine gültige Zahlungsmethode hinterlegt sein. Falls die Zahlungsmethode ungültig ist, erscheint ein Dialog zur Auswahl einer neuen. **Überweisung** ist immer als Fallback verfügbar. SMS-Versand ist ein kostenpflichtiges Feature: **0,10€ pro SMS** (max. 160 Zeichen). Ein Kunde kann nur gelöscht werden, wenn er keine aktiven Abonnements, Rechnungen, Bestellungen oder Zahlungen hat. Alternativ kannst du Kunden **archivieren** - diese können später wiederhergestellt werden. Mahngebühren werden aktuell noch nicht in den Buchhaltungsexport (z.B. DATEV) übernommen. Diese müssen manuell verbucht werden. *** ## Weitere Hilfe Bei Fragen zum Go-Live: [Termin buchen](https://cal.com/team/fynn/fynn-documentation) oder [Support kontaktieren](mailto:hi@fynn.eu) # Nummernkreise Source: https://docs.fynn.eu/guide/tenant/number-ranges Nummernkreise Standardmäßig sind die Nummernkreise bereits eingerichtet. Solltest du allerdings eigene Nummernkreise benötigen, kannst du diese entsprechend konfigurieren. Für jeden Belegtyp (z.B. Rechnung, Angebot, Bestellung, etc.) und Dokumente kann ein eigener Nummernkreis eingerichtet werden. Folgende Typen sind verfügbar: * Kunden * Abonnements * Rechnungen * Gutschriften * Mahnungen / Zahlungserinnerungen * Zahlungen * Stornos * DATEV Debitorennummern * Mandatsreferenz (SEPA-Lastschrift) ## Nummernkreise einrichten ### Platzhalter Um deine Nummern individuell anzupassen, stehen dir verschiedene Platzhalter zur Verfügung: * `{number}`: Eine fortlaufende Nummer, die automatisch generiert wird. * `{day}`: Der Tag des Monats (z.B. 10). * `{month}`: Der Monat (z.B. 09). * `{year}`: Das Jahr (z.B. 22). * `{yearLong}`: Das vollständige Jahr (z.B. 2022). * `{customerNumber}`: Die Kundennummer. ### Nummernvergabe Fynn bietet dir zwei verschiedene Verfahren zur Nummernvergabe: * Fortlaufende Nummer: Deine Nummer basiert auf einer fortlaufenden Sequenz. * Zufälliger String: Deine Nummer wird mit zufälligen Zahlen und Buchstaben generiert. Mit diesen Optionen kannst du sicherstellen, dass deine Dokumentennummern genau deinen Anforderungen entsprechen. ### Nummernformatierung Im Feld "Format" kannst du das Format für die Nummern festlegen. Zum Beispiel könntest du für Rechnungen das Format `RE-{number}` verwenden. ## Nummernkreise anpassen Gehe hierzu zu [Einstellungen > Nummernkreise](https://app.fynn.eu/settings/number-ranges) Nummernkreise Einmal vergebene Nummernkreise werden nicht erneut vergeben, unabhängig davon ob die "Aktuelle Nummer" zurückgesetzt wird. # Passkeys Source: https://docs.fynn.eu/guide/tenant/passkeys Melde dich mit Face ID, Touch ID oder einem Hardware-Sicherheitsschlüssel an — sicher und ohne Passwort. ## Übersicht Passkeys sind eine sichere und bequeme Alternative zum klassischen Passwort-Login. Sie nutzen die biometrische Authentifizierung deines Geräts (Face ID, Touch ID, Windows Hello) oder einen Hardware-Sicherheitsschlüssel (z. B. YubiKey), um dich bei Fynn anzumelden. **Vorteile von Passkeys:** * **Sicherer als Passwörter** — Passkeys basieren auf Public-Key-Kryptografie und können nicht erraten oder gestohlen werden * **Phishing-resistent** — Passkeys sind an die Domain gebunden und funktionieren nicht auf gefälschten Websites * **Kein Passwort nötig** — Login mit einem Fingertipp oder Blick Passkeys ergänzen den bestehenden Passwort-Login. Du kannst dich weiterhin mit deinem Passwort anmelden, auch wenn ein Passkey eingerichtet ist. ## Passkey einrichten Klicke auf deinen Avatar oder Namen in der oberen Navigation und wähle **Mein Profil**. Navigiere dann zum Tab **Sicherheit**. Klicke im Bereich **Passkeys** auf **Passkey hinzufügen**. Dein Browser fordert dich auf, einen Passkey zu erstellen. Bestätige die Erstellung mit deinem Gerät: * **Mac**: Touch ID oder Systempasswort * **iPhone/iPad**: Face ID oder Touch ID * **Windows**: Windows Hello (Fingerabdruck, Gesichtserkennung oder PIN) * **Hardware-Schlüssel**: Berühre den Sicherheitsschlüssel Vergib einen aussagekräftigen Namen für den Passkey (z. B. „MacBook Pro Büro" oder „YubiKey"). So erkennst du später, welches Gerät oder welcher Schlüssel hinterlegt ist. Du kannst mehrere Passkeys für verschiedene Geräte einrichten. So kannst du dich sowohl am Laptop als auch am Smartphone mit einem Passkey anmelden. ## Mit Passkey anmelden Öffne die Fynn Login-Seite unter [app.fynn.eu](https://app.fynn.eu). Klicke auf **Mit Passkey anmelden**. Dein Browser erkennt automatisch, welche Passkeys für diese Seite verfügbar sind. Bestätige den Login mit deinem Gerät (Face ID, Touch ID, Sicherheitsschlüssel). Du wirst sofort angemeldet — ohne E-Mail oder Passwort. ## Passkeys verwalten Im Bereich **Mein Profil > Sicherheit** siehst du alle eingerichteten Passkeys mit folgenden Informationen: | Feld | Beschreibung | | --------------------- | ---------------------------------------------- | | **Name** | Der von dir vergebene Name des Passkeys | | **Erstellt am** | Datum der Einrichtung | | **Zuletzt verwendet** | Datum der letzten Anmeldung mit diesem Passkey | ### Passkey entfernen Klicke neben dem Passkey auf das Löschen-Symbol, um ihn zu entfernen. Nach dem Entfernen kann dieser Passkey nicht mehr für die Anmeldung verwendet werden. Wenn du deinen letzten Passkey entfernst, stelle sicher, dass du dich noch mit deinem Passwort anmelden kannst. ## Häufige Fragen Passkeys werden von allen modernen Browsern und Betriebssystemen unterstützt: * **macOS / iOS**: Safari, Chrome, Firefox (ab macOS 13 / iOS 16) * **Windows**: Chrome, Edge, Firefox (ab Windows 10) * **Android**: Chrome (ab Android 9) Hardware-Sicherheitsschlüssel (FIDO2/WebAuthn) werden ebenfalls unterstützt. Das hängt von deinem Ökosystem ab. Apple synchronisiert Passkeys über iCloud Keychain auf alle Apple-Geräte. Google synchronisiert über den Google Password Manager. Für geräteübergreifende Nutzung (z. B. Mac und Windows) empfehlen wir, auf jedem Gerät einen eigenen Passkey einzurichten oder einen Hardware-Sicherheitsschlüssel zu verwenden. Wenn du dein Gerät verlierst, kannst du dich weiterhin mit deinem Passwort anmelden. Entferne den Passkey des verlorenen Geräts anschließend in den Kontoeinstellungen. Ja. Passkeys ergänzen den Passwort-Login. Beide Methoden funktionieren parallel. Auf der Login-Seite kannst du wählen, ob du dich mit Passkey oder Passwort anmelden möchtest. Ja. Passkeys basieren auf asymmetrischer Kryptografie (WebAuthn-Standard). Der private Schlüssel verlässt dein Gerät nie. Es gibt kein gemeinsames Geheimnis, das abgefangen werden kann — Phishing, Credential Stuffing und Brute-Force-Angriffe sind damit ausgeschlossen. # Zahlungsmethoden Source: https://docs.fynn.eu/guide/tenant/payment-methods Zahlungsmethoden Du kannst verschiedene Zahlungsmethoden einrichten, um deinen Kunden eine bequeme und sichere Möglichkeit zur Bezahlung anzubieten. ## Verfügbare Zahlungsmethoden Folgende Zahlungsmethoden stehen zur Verfügung: * SEPA-Lastschrift: Kunden können Zahlungen über SEPA-Lastschriftverfahren vornehmen. * Überweisung: Kunden können Zahlungen per Überweisung tätigen. * Kreditkarte: Kunden können mit Kreditkarten bezahlen, darunter Visa, Mastercard, American Express usw. * PayPal: Kunden können ihre PayPal-Konten verwenden, um Zahlungen zu tätigen. ## Zahlungsanbieter einrichten Um Zahlungsmethoden zu aktivieren, musst du zuerst die Zahlungsanbieter einrichten.