Zum Inhalt springen

Fehler

Fehler kommen immer im selben Format: ein maschinenlesbarer Code in error, eine lesbare Meldung in message und bei Bedarf Details.
Beispiel
HTTP/1.1 400 Bad Request
Content-Type: application/json; charset=utf-8

{
  "error": "validation_error",
  "message": "Ungültige Eingabe.",
  "details": [
    { "path": "lines.0.quantity", "message": "Too small: expected number to be >0" }
  ]
}
  • Werten Sie error aus, nicht message – der Code ist Teil der stabilen API, der Text kann sich ändern.
  • message ist je nach Request-Header Accept-Language (de oder en) deutsch oder englisch. Ohne unterstützte Sprache antwortet die API v1 auf Englisch – für deutsche Meldungen Accept-Language: de senden.
  • Bei validation_error enthält details eine Liste mit path (Punkt-Notation) und message je Feld.
  • Wiederholen lohnt sich bei 429, 409 idempotency_in_progress und 5xx – mit Pause und demselben Idempotency-Key. Andere 4xx-Fehler ändern sich durch Wiederholen nicht.

HTTP-Status

StatusBedeutung
400Anfrage ungültig
401nicht angemeldet bzw. Schlüssel/Token ungültig
402Kontingent erschöpft oder Leistung nicht im Abo (z. B. Briefe)
403keine Berechtigung
404nicht gefunden
409Zustand erlaubt die Aktion nicht (Konflikt)
410Ressource nicht mehr vorhanden (z. B. Importdatei)
413 / 415Datei zu groß bzw. Dateityp nicht erlaubt
422fachlich nicht verarbeitbar (z. B. Pflichtangaben fehlen)
429zu viele Anfragen
500Fehler bei DebtFlow
501nicht verfügbar
502externer Dienst (E-Mail, Stripe, Briefversand) hat einen Fehler gemeldet
503vorübergehend nicht verfügbar

Allgemeine Fehlercodes

StatuserrorBedeutung
400validation_errorPfad-, Query- oder Body-Parameter ungültig; details nennt die Felder
401unauthorizedkein oder kein lesbarer Bearer-Token
401invalid_api_keyAPI-Schlüssel unbekannt, widerrufen oder abgelaufen
401invalid_tokenOAuth-Access-Token unbekannt, abgelaufen oder Verbindung getrennt
403forbiddenAktion für dieses Konto nicht erlaubt
403insufficient_scopeSchlüssel bzw. App hat die nötige Berechtigung nicht; details.missing
403session_requirednur im Dashboard möglich (Kontoverwaltung)
403account_not_approvedKonto ist noch nicht freigeschaltet
403account_disabledKonto ist gesperrt
403mfa_requiredDashboard-Sitzung ohne abgeschlossenen zweiten Faktor
403demo_unavailableim öffentlichen Demo-Konto gesperrt (Versand, Kosten, KI, Uploads, Zugangsdaten)
403plan_limit_reachedGrenze des Abos erreicht (z. B. Anzahl Kontakte)
404not_foundRessource existiert nicht oder gehört zu einem anderen Konto
409conflictZustand erlaubt die Aktion nicht
409idempotency_in_progressAnfrage mit gleichem Idempotency-Key läuft noch
409, 422idempotency_conflictIdempotency-Key wurde für eine andere Anfrage verwendet
409limit_reachedHöchstzahl erreicht (z. B. Webhook-Endpunkte, API-Schlüssel)
413payload_too_largeDatei oder Anfrage zu groß
415unsupported_media_typeDateityp nicht erlaubt
429rate_limitedzu viele Anfragen; Header Retry-After beachten
500internal_errorFehler bei DebtFlow; später erneut versuchen
501not_implementedFunktion ist (noch) nicht verfügbar
503not_readyDienst startet bzw. ist vorübergehend nicht bereit; später erneut versuchen

Fachliche Fehlercodes

Die Liste wird mit dem Quellcode abgeglichen (automatischer Test). Reagieren Sie im Zweifel auf den HTTP-Status: neue, spezifischere Codes können hinzukommen, ohne dass sich der Status ändert.

Rechnungen, Gutschriften, Angebote

StatuserrorBedeutung
409document_lockedBeleg ist festgeschrieben und unveränderbar (GoBD); Korrektur per Storno oder Gutschrift
409number_conflictBelegnummer bereits vergeben – Nummernmuster des Nummernkreises prüfen
409number_range_in_useim Zeitraum wurden schon Nummern vergeben; Startnummer nicht mehr änderbar
409invoice_not_finalizedAktion nur für festgeschriebene Rechnungen
409offer_not_finalizedAktion nur für festgeschriebene Angebote
409has_credit_notesStorno nicht möglich, es gibt Gutschriften – Rest per Gutschrift korrigieren
409already_deductedAbschlagsrechnung ist bereits in einer Schlussrechnung abgezogen
409already_handed_overRechnung wurde bereits ans Mahnwesen übergeben
409already_paidbereits vollständig bezahlt
409not_payableBeleg kann nicht (mehr) bezahlt werden
409einvoice_not_availablefür diesen Beleg gibt es keine E-Rechnung
422invoice_incompletePflichtangaben (§ 14 UStG) fehlen; details listet sie
422overpaymentZahlung übersteigt den offenen Betrag
422einvoice_invalidE-Rechnung verletzt Regeln (XRechnung/ZUGFeRD); details nennt sie
422einvoice_unreadableDatei ist keine lesbare E-Rechnung
422einvoice_not_foundPDF enthält keine eingebettete E-Rechnung (ZUGFeRD/Factur-X)
500pdf_fonts_missingPDF konnte nicht erzeugt werden (Schriften fehlen auf dem Server)
502email_failedE-Mail-Versand fehlgeschlagen

Forderungen, Zahlungen, Briefe

StatuserrorBedeutung
402quota_exceededKontingent (z. B. Briefe im Monat) ausgeschöpft
402letters_not_availableBriefversand im Abo nicht enthalten bzw. nicht eingerichtet
409target_not_openPosten ist nicht (mehr) offen
409amount_exceeds_openBetrag übersteigt den offenen Betrag
409payment_processingZahlung wird gerade verarbeitet
409payment_unavailableOnline-Zahlung für diesen Posten nicht möglich
502provider_failedexterner Dienst (z. B. Briefdienstleister) hat einen Fehler gemeldet
400invalid_tokenBriefdiener-Token abgelehnt (nur /integrations/briefdiener)
503unreachableBriefdiener ist vorübergehend nicht erreichbar

Recherche und Gläubiger-KI

StatuserrorBedeutung
409inquiry_in_progressfür den Kontakt läuft bereits eine Melderegisteranfrage (keine Doppelkosten)
422missing_contact_dataGeburtsdatum oder bekannte Anschrift des Kontakts fehlt
429ai_rate_limitedzu viele KI-Anfragen in kurzer Zeit; details.retryAfter beachten
429ai_quota_exhaustedtägliches KI-Kontingent erschöpft
502ai_failedKI-Dienst hat keinen verwertbaren Text geliefert; später erneut versuchen
503ai_unavailableGläubiger-KI ist nicht eingerichtet

Bank

StatuserrorBedeutung
400invalid_ibanIBAN ungültig
409duplicate_ibanBankkonto mit dieser IBAN existiert bereits
409iban_mismatchImport gehört zu einem anderen Konto
409account_archivedBankkonto ist archiviert
409account_has_transactionsBankkonto hat Umsätze und kann nicht gelöscht werden
409already_matchedUmsatz ist bereits zugeordnet
409not_matchedUmsatz ist keinem Posten zugeordnet
409transaction_matchedzugeordneter Umsatz kann nicht geändert werden
409transaction_ignoredUmsatz ist als ignoriert markiert
409direction_mismatchEingänge nur offenen Posten, Ausgaben nur Belegen zuordnen
409amount_exceeds_transactionZuordnungen übersteigen den Umsatzbetrag
409possible_duplicateImport enthält vermutlich bereits importierte Umsätze
409import_completedImport ist bereits abgeschlossen
409import_has_matchesImport enthält zugeordnete Umsätze und kann nicht zurückgenommen werden
409already_revertedImport wurde bereits zurückgenommen
410import_file_missingImportdatei ist nicht mehr vorhanden – erneut hochladen
422mapping_requiredSpaltenzuordnung der CSV-Datei fehlt
422unprocessable_fileDatei konnte nicht verarbeitet werden

Belege und Importe

StatuserrorBedeutung
409already_assignedBeleg ist bereits zugeordnet
409in_useEintrag wird noch verwendet
422file_missingDatei fehlt
422ocr_unreadableTexterkennung konnte die Datei nicht lesen
422ocr_unsupportedDateityp wird von der Texterkennung nicht unterstützt
422ocr_file_too_largeDatei ist für die Texterkennung zu groß
400invalid_payloadeingehende Daten (z. B. E-Mail-Eingang) ungültig
400invalid_signatureSignatur eines eingehenden Aufrufs ungültig

Buchhaltung

StatuserrorBedeutung
409period_closedZeitraum ist abgeschlossen (festgeschrieben)
409invalid_periodZeitraum ungültig oder überschneidet sich
409open_issuesoffene Punkte verhindern den Abschluss; details listet sie
409closing_in_progressAbschluss läuft bereits
409chart_lockedKontenrahmen kann nach ersten Buchungen nicht mehr gewechselt werden
409generated_entryautomatisch erzeugte Buchung – Quelle ändern statt Buchung
409datev_numbers_missingBerater-/Mandantennummer für den DATEV-Export fehlen

Projekte und Zeiten

StatuserrorBedeutung
409project_has_entriesProjekt hat Zeiteinträge
409task_has_entriesAufgabe hat Zeiteinträge
409time_entry_invoicedZeiteintrag ist bereits abgerechnet
409time_entries_not_billableausgewählte Zeiten sind nicht abrechenbar
409timer_not_runninges läuft keine Zeiterfassung
409invoice_activeZeiten gehören zu einer nicht stornierten Rechnung und können nicht freigegeben werden
422nothing_to_invoicekeine abrechenbaren Zeiten im Zeitraum

Stripe Connect und Online-Zahlungen

StatuserrorBedeutung
400stripe_oauth_failedVerbindung mit Stripe fehlgeschlagen
400invalid_stateRückruf passt nicht zur gestarteten Verbindung
409stripe_not_connectedkein Stripe-Konto verbunden
409stripe_account_in_useStripe-Konto ist mit einem anderen DebtFlow-Konto verbunden
409already_connectedbereits verbunden
409not_connectednicht verbunden
409managed_in_stripeEinstellung wird in Stripe verwaltet
502stripe_checkout_failedStripe hat die Zahlungsseite nicht erzeugt
503online_payments_unavailableOnline-Zahlungen sind nicht konfiguriert

Sicherheit (Dashboard)

StatuserrorBedeutung
400challenge_expiredPasskey-Anfrage abgelaufen – erneut starten
400passkey_invalidPasskey-Antwort ungültig
400invalid_second_factorCode oder Passkey falsch
400setup_expiredEinrichtung abgelaufen – erneut starten
409passkey_existsPasskey ist bereits registriert
409no_factorkein zweiter Faktor eingerichtet
409no_passkeykein Passkey eingerichtet
409last_factorder letzte zweite Faktor kann nicht entfernt werden
403reauthentication_requiredfür die Einrichtung bitte erneut anmelden
429mfa_lockedzu viele Fehlversuche – vorübergehend gesperrt

Der OAuth-Token-Endpunkt antwortet abweichend im OAuth-Format mit error_description, siehe Authentifizierung.