Fehlermeldungen
444 Meldungen aus dem laufenden Programm — was sie bedeuten und was zu tun ist. Suchen Sie nach dem Wortlaut oder nach der Kennung, die in der Meldung steht.
KI-Import, KI-Agent, E-Mail/Postfächer, Warenwirtschaft, Team/Einladungen, Abrechnung
KI-Import, KI-Agent, E-Mail/Postfächer, Warenwirtschaft, Team/Einladungen, Abrechnung · 118 Meldungen
unsupported-filesFür Betriebsinhaber · 400Mindestens eine Datei hat einen Typ, den der Import nicht lesen kann. Erlaubt sind Fotos (JPEG, PNG, WebP, GIF), PDF, CSV, TSV, Text und Excel (.xlsx). HEIC-Fotos vom iPhone und alte .xls-Dateien gehen nicht — bitte vorher als JPEG bzw. .xlsx oder CSV speichern.
Eine gewählte Datei hat einen MIME-Typ, der nicht in IMPORT_MIME_TYPES steht, oder sie ist größer als 20 MB (IMPORT_MAX_FILE_BYTES) bzw. es sind mehr als 20 Dateien.
unsupported-files-clientFür BetriebsinhaberNicht lesbar: <Dateinamen>. Erlaubt sind Fotos (JPEG, PNG, WebP, GIF), PDF, CSV, TSV, Text und Excel (.xlsx). HEIC-Fotos vom iPhone und alte .xls-Dateien gehen nicht …
Der Dialog prüft die aus der Mediathek gewählten Dateien schon im Browser gegen ERLAUBTE_TYPEN und lehnt sie vor dem Start ab.
unknown-filesFür Betriebsinhaber · 400Diese Dateien liegen nicht in der Mediathek dieses Betriebs: <Namen>
Die übergebenen Datei-URLs lassen sich keinem Medium dieses Betriebs zuordnen (fremder Betrieb oder Medium gelöscht).
upload-url-not-allowedFür BetriebsinhaberDiese Datei liegt nicht an einer erlaubten Upload-Adresse.
Die in filesJson gespeicherte Adresse besteht die Host-Prüfung (pruefeUploadUrl) nicht — typisch bei Altbestand vor der Verschärfung.
file-not-fetchableFür BetriebsinhaberDatei nicht abrufbar (HTTP <status>).
Der Abruf der Upload-Adresse antwortete nicht mit 2xx (Datei gelöscht, Speicher nicht erreichbar) oder wurde umgeleitet (redirect: 'error').
file-too-largeFür BetriebsinhaberDatei ist grösser als 20 MB.
Content-Length oder die tatsächlich geladenen Bytes überschreiten MAX_DOWNLOAD_BYTES (20 MB).
file-is-binaryFür BetriebsinhaberDiese Datei ist keine Textdatei (möglicherweise eine alte .xls-Datei oder ein anderes Binärformat). Bitte in Excel als .xlsx oder CSV speichern und erneut hochladen.
Über 5 % der ersten 8.000 Zeichen sind Steuerzeichen oder U+FFFD (istBinaer) — der Inhalt ist kein Text.
xlsx-unreadableFür BetriebsinhaberDiese Excel-Datei kann nicht gelesen werden. Alte .xls-Dateien werden nicht unterstützt: bitte in Excel als .xlsx oder CSV speichern und erneut hochladen.
JSZip kann die Datei nicht als ZIP öffnen — eine echte .xls ist BIFF, kein ZIP.
xlsx-no-sheetsFür BetriebsinhaberKeine Arbeitsblätter in der Datei gefunden.
Im ZIP liegt keine Datei xl/worksheets/sheetN.xml — die Arbeitsmappe ist beschädigt oder keine echte XLSX.
xlsx-first-sheet-emptyFür BetriebsinhaberDas erste Arbeitsblatt ist leer.
Gelesen wird nur das erste Blatt; steht die Liste auf Blatt 2, sieht der Import ein leeres Blatt.
file-no-readable-textFür BetriebsinhaberDie Datei enthält keinen lesbaren Text.
Nach dem Dekodieren bzw. der XLSX-Umwandlung bleibt kein Zeichen übrig — die Datei ist leer.
model-no-jsonFür BetriebsinhaberDas Modell antwortete ohne JSON: <erste 200 Zeichen>
In der Modellantwort steht keine geschweifte Klammernpaarung — die Antwort ist Prosa oder eine Ablehnung.
model-invalid-jsonFür BetriebsinhaberUngültiges JSON vom Modell: <Parserfehler>
JSON.parse scheitert am ausgeschnittenen Block — meist abgeschnittene Antwort bei sehr großen Dateien.
model-schema-mismatchFür BetriebsinhaberAntwort des Modells passt nicht zum Schema (<pfad>: <meldung>).
Das JSON des Modells verletzt extractionResultSchema (falsche Feldtypen, fehlende Pflichtfelder).
import-no-valid-filesFür BetriebsinhaberZu diesem Lauf sind keine gültigen Dateien gespeichert.
filesJson ist leer oder unlesbar, etwa nach einem Datenfehler an der Zeile.
import-file-incompleteFür BetriebsinhaberFür <n> Datei(en) fehlt das Ergebnis: ein Anlauf wurde mitten im Lesen beendet. Bitte diese Datei(en) in einem neuen Import erneut hochladen.
Gelesene Dateien plus Datei-Meldungen ergeben nicht die Zahl der Dateien — ein Anlauf wurde abgeschnitten (Laufzeitlimit).
refine-failedFür BetriebsinhaberNachbesserung fehlgeschlagen: <Meldung>
Der zweite Modellaufruf mit dem Hinweis des Wirts scheiterte; die vorige Vorschau bleibt gültig.
mapped-records-unreadableFür BetriebsinhaberDie zugeordneten Datensätze sind nicht mehr lesbar. Bitte den Import noch einmal starten.
mappedJson lässt sich nicht mehr parsen, obwohl totalCount > 0 ist — die LongText-Spalte wurde beschädigt.
extracted-json-conflictFür BetriebsinhaberDas Ergebnis der Auswertung konnte nicht gespeichert werden: die Zeile wurde laufend von einem anderen Anlauf verändert.
Der optimistische Spaltentausch schlug in allen Versuchen fehl, weil parallele Anläufe dieselbe Zeile schreiben.
import-stalledFür BetriebsinhaberDer Import kommt nicht voran. Möglich ist, dass der Hintergrundlauf nicht greift (CRON_SECRET fehlt oder der Zeitplan ist im Plan nicht enthalten) oder ein Schritt wiederholt abbricht. Du kannst ihn erneut starten.
Der Lauf steht länger als LAUF_TIMEOUT_MS auf PENDING/RUNNING; die Statusabfrage setzt ihn auf FAILED.
wrong-stateFür Betriebsinhaber · 409Dieser Lauf wartet nicht auf eine Freigabe.
Der Lauf steht nicht auf AWAITING_REVIEW — er wurde bereits freigegeben, abgebrochen oder arbeitet noch.
nothing-to-writeFür Betriebsinhaber · 400Es gibt keine Datensätze zum Übernehmen.
totalCount ist 0 — die Auswertung hat in den Dateien keine Gäste bzw. Reservierungen gefunden.
wrong-state-refineFür Betriebsinhaber · 409Nachbessern geht erst, wenn die Vorschau bereitsteht.
Nachbessern ist nur im Status AWAITING_REVIEW erlaubt; der Lauf arbeitet noch oder ist beendet.
import-start-failedFür BetriebsinhaberDer Import konnte nicht gestartet werden. / Die Nachbesserung konnte nicht gestartet werden. / Die Freigabe ist nicht durchgegangen. / Der Lauf konnte nicht abgebrochen werden.
Rückfall-Toasts, wenn die Anfrage netzwerkseitig scheitert oder die Antwort keine message/error trägt.
forbiddenFür Mitarbeiter · 403{"error":"forbidden","module":"guests|reservations","op":"..."}
Der angemeldeten Person fehlt das Modulrecht, das die Art des Laufs verlangt (Gäste bzw. Reservierungen).
not-found-importFür Mitarbeiter · 404{"error":"not_found"}
Der Lauf gehört zu einem anderen Betrieb oder existiert nicht — 404 statt 403, damit keine Kennungen preisgegeben werden.
ai-credits-exhausted-streamFür BetriebsinhaberDas KI-Guthaben ist aufgebraucht.
Der Lauf brach mit AiCreditsError ab; der Fehler geht als error-Ereignis mit Code AI_CREDITS_EXHAUSTED in den SSE-Strom.
agent-turn-limitFür BetriebsinhaberIch habe das Rundenlimit von 24 Schritten erreicht und höre hier auf. / _Abgebrochen: Rundenlimit von 24 Schritten erreicht._
state.turnCount erreicht MAX_MODEL_TURNS (24) — der Auftrag brauchte mehr Modell-Runden als erlaubt.
agent-run-errorFür Betriebsinhaber<Fehlermeldung des Laufs> (SSE-Ereignis type: 'error')
Ein Werkzeug oder der Modellaufruf warf; der Lauf wird auf status 'error' gesetzt und die Meldung in error gespeichert.
agent-unexpectedFür BetriebsinhaberUnerwarteter Fehler.
Rückfall im SSE-Transport, wenn der Handler mit einem Fehler ohne Message wirft.
agent-canceledFür BetriebsinhaberDer Auftrag wurde abgebrochen.
Verbindung weg (Tab geschlossen, Netzwechsel) oder AbortError; offene Teilaufgaben werden als failed geschlossen.
agent-step-errorFür BetriebsinhaberFehler: <Meldung> (im Schritt des Assistenten)
Ein einzelner Werkzeugaufruf warf; der Schritt wird mit status 'error' protokolliert und das Ergebnis als isError ans Modell gegeben.
attachment-not-foundFür Betriebsinhaber · 400Anhang gehört nicht zur Mediathek dieses Betriebs.
Eine mitgeschickte Anhang-URL lässt sich keinem Medium dieses Betriebs zuordnen.
conversation-not-foundFür Betriebsinhaber · 404Unterhaltung nicht gefunden
Die conversationId gehört nicht zu diesem Betrieb bzw. Nutzer oder wurde gelöscht.
empty-messageFür Betriebsinhaber · 400Leere Nachricht
Nach dem Trimmen bleibt kein Text und es sind keine Anhänge dabei.
run-not-awaiting-confirmationFür Betriebsinhaber · 409Dieser Lauf wartet auf keine Bestätigung.
Der Lauf steht nicht auf awaiting_confirmation — bereits bestätigt, abgelehnt oder abgebrochen.
undo-failedFür Betriebsinhaber · 500{"error":"undo_failed"}
Das Zurücknehmen warf einen unerwarteten Fehler (Datenbank, Theme-Datei).
undo-no-snapshotFür BetriebsinhaberKeine Momentaufnahme vorhanden. / Kein Datensatz vermerkt. / Datensatz existiert nicht mehr. / Keine Datei vermerkt. / Ein Restaurant wird nicht geloescht.
Im Rückgängig-Journal fehlt der Vorzustand oder der Datensatz wurde inzwischen anderweitig gelöscht; die Einträge landen in failed[].
undo-theme-missingFür BetriebsinhaberTheme nicht gefunden. / Kein aktives Theme gefunden.
Das zum Journaleintrag gehörende Theme existiert nicht mehr oder es ist kein Theme live gesetzt.
transcribe-not-configuredFür Entwickler · 501Spracheingabe benötigt OPENAI_API_KEY (Whisper).
Auf dem Server ist kein OPENAI_API_KEY gesetzt.
audio-too-largeFür Betriebsinhaber · 400Audio zu groß (max. 20 MB)
Die gesendete Audiodatei überschreitet 20 MB.
transcription-failedFür Betriebsinhaber · 502Transkription fehlgeschlagen
Der Whisper-Aufruf antwortete mit einem Fehler oder brach ab.
tts-not-configuredFür Entwickler · 501Sprachausgabe benötigt OPENAI_API_KEY (TTS).
Kein OPENAI_API_KEY auf dem Server gesetzt.
tts-failedFür Betriebsinhaber · 502Sprachausgabe fehlgeschlagen
Der TTS-Aufruf scheiterte oder lieferte kein Audio.
mailbox-blocked-hostFür Betriebsinhaber"<host>" kann nicht als Mailserver verwendet werden — die Adresse liegt im internen Netz. Bitte den Servernamen des E-Mail-Anbieters eintragen.
Der eingetragene Servername löst auf eine interne/private Adresse auf und wird vom host-guard gesperrt (SSRF-Schutz).
mailbox-timeoutFür BetriebsinhaberZeitüberschreitung nach <n> s zu <host:port>. Server und Port prüfen; oft blockiert auch eine Firewall den Port.
Der Verbindungsversuch lief in die Zeitgrenze (ETIMEDOUT, GREETING_TIMEOUT u. a.).
mailbox-connection-refusedFür BetriebsinhaberVerbindung abgelehnt von <host:port>. Dort nimmt kein SMTP/IMAP-Dienst an — meist ist die Portnummer falsch.
ECONNREFUSED: auf dem angegebenen Port lauscht kein Mail-Dienst.
mailbox-host-not-foundFür BetriebsinhaberServer "<host>" nicht gefunden. Bitte den Namen prüfen (Tippfehler, oder es fehlt z. B. "mail." davor).
DNS-Auflösung schlug fehl (ENOTFOUND, EAI_AGAIN).
mailbox-auth-rejectedFür BetriebsinhaberAnmeldung abgelehnt. Bei Gmail, Outlook und den meisten Anbietern braucht es ein eigenes App-Passwort statt des Kontopassworts. (Server: …)
EAUTH bzw. AUTHENTICATIONFAILED — Benutzername oder Passwort passt nicht, oder das Konto verlangt ein App-Passwort.
mailbox-cert-nameFür BetriebsinhaberDas Zertifikat von <host> passt nicht zu diesem Namen. Meist ist der Servername des Anbieters ein anderer als die eigene Domain.
ERR_TLS_CERT_ALTNAME_INVALID: eingetragen ist die eigene Domain statt des Anbieterservers.
mailbox-cert-expiredFür BetriebsinhaberDas Zertifikat von <host> ist abgelaufen. Das muss der Anbieter erneuern.
CERT_HAS_EXPIRED — das Serverzertifikat des Anbieters ist nicht mehr gültig.
mailbox-cert-untrustedFür BetriebsinhaberDas Zertifikat von <host> lässt sich nicht überprüfen (selbst ausgestellt oder unvollständige Kette).
Selbst ausgestelltes Zertifikat oder fehlendes Zwischenzertifikat auf dem Mailserver.
mailbox-no-starttlsFür Betriebsinhaber<host:port> bietet keine Verschlüsselung an (kein STARTTLS). Der Versuch wurde abgebrochen, weil die Zugangsdaten sonst im Klartext übertragen würden. Meist stimmt der Port nicht: IMAP 993 und SMTP 465 mit „SSL/TLS", SMTP 587 und IMAP 143 mit „STARTTLS".
requireTLS ist gesetzt, der Server kündigt STARTTLS aber nicht an — fast immer falscher Port oder falsche Verschlüsselungswahl.
mailbox-tls-mismatchFür BetriebsinhaberVerschlüsselung passt nicht zu <host:port>. Für Port 465 „SSL/TLS", für Port 587 und 143 „STARTTLS" wählen. (Server: …)
EPROTO/ESOCKET bzw. tlsFailed — die gewählte Verschlüsselung passt nicht zum Port.
mailbox-generic-failureFür BetriebsinhaberSMTP-/IMAP-Verbindung zu <host:port> fehlgeschlagen: <Servertext oder "Unbekannter Fehler.">
Rückfall für alle nicht eingeordneten Verbindungsfehler; der Fremdtext ist um Geheimnisse geschwärzt.
mailbox-secret-suppressedFür Betriebsinhaber[Meldung des Servers unterdrückt — sie könnte das Passwort enthalten]
Ein hinterlegtes Geheimnis ist kürzer als vier Zeichen; dann fällt der ganze Fremdtext weg statt halb geschwärzt zu werden.
credentials-undecryptableFür BetriebsinhaberDie hinterlegten Zugangsdaten lassen sich nicht entschlüsseln. Bitte das Passwort erneut eintragen.
Das verschlüsselte Passwort passt nicht zum aktuellen SECRETS_ENCRYPTION_KEY (Schlüssel gewechselt oder fehlt). Gleicher Text in imap.ts:31 und actions.ts:66.
smtp-config-missingFür BetriebsinhaberFür den Versand fehlen SMTP-Server und Port. / Für den Empfang fehlen IMAP-Server und Port.
Host leer oder Port 0 in der Postfach-Zeile (Empfang: src/lib/mail/sync.ts:85).
mailbox-no-passwordFür BetriebsinhaberFür dieses Postfach ist kein Passwort hinterlegt.
passwordEnc ist leer — das Postfach wurde ohne Passwort gespeichert.
crypto-unavailableFür Entwickler · 503Auf diesem Server fehlt der Schlüssel für die Passwortverschlüsselung (SECRETS_ENCRYPTION_KEY). Bis er eingerichtet ist, lassen sich keine Zugangsdaten speichern — bitte den Betreiber informieren.
SECRETS_ENCRYPTION_KEY fehlt oder hat die falsche Länge (MailboxCryptoUnavailableError). Gleiche Antwort in mailboxes/[id]/route.ts:154.
duplicateFür Betriebsinhaber · 409Dieses Postfach ist bereits verbunden.
Für diesen Betrieb existiert schon eine Verbindung mit derselben E-Mail-Adresse (Unique auf restaurantId+email). Gleiche Antwort beim Ändern: mailboxes/[id]/route.ts:63.
not-found-mailboxFür Betriebsinhaber · 404Postfach nicht gefunden.
Die Kennung gehört nicht zu diesem Betrieb oder das Postfach wurde gelöscht.
mailbox-inactiveFür Betriebsinhaber · 409Dieses Postfach ist abgeschaltet. Bitte in den Einstellungen aktivieren.
Das Postfach ist auf inaktiv gesetzt, es soll aber darüber gesendet werden.
send-failedFür Betriebsinhaber · 502Der Versand ist fehlgeschlagen. (bzw. die genaue SMTP-Diagnose)
sendViaMailbox kam nicht durch; die Meldung ist die geschwärzte SMTP-Diagnose aus describeMailError.
email-transport-not-configuredFür Entwickler{skipped: true, error: 'email_transport_not_configured'} — die Mail wurde NICHT versendet
Kein Standardpostfach vorhanden und kein RESEND_API_KEY gesetzt — es gibt keinen Versandweg.
mailbox-send-failedFür Betriebsinhaber{success: false, error: 'mailbox_send_failed'} (im EmailLog vermerkt)
Versand über das Kundenpostfach scheiterte oder warf; die Mail (z. B. Bestätigung) ist nicht raus.
resend-errorFür Entwickler[mailer] Resend error: <Meldung> (im EmailLog als error)
Resend lehnte den Versand ab — meist nicht verifizierte Absenderdomain oder ungültige Empfängeradresse.
sender-domain-unalignedFür Entwickler[mailer] Plattformadresse <adresse> liegt nicht auf der Domain von EMAIL_FROM (<from>) — sie ist bei Resend vermutlich nicht verifiziert und wird deshalb NICHT als Absender benutzt.
platformEmail und EMAIL_FROM liegen auf verschiedenen Domains; als Absender wird auf EMAIL_FROM zurückgefallen.
mail-message-unmappableFür BetriebsinhaberDie Nachricht lässt sich im Postfach nicht mehr zuordnen. Nach dem nächsten Abgleich stimmt die Ansicht wieder.
Zur lokalen Zeile fehlt eine Message-ID, mit der sie per IMAP SEARCH gefunden werden könnte.
mail-message-goneFür BetriebsinhaberDie Nachricht liegt nicht mehr in diesem Ordner — vermutlich wurde sie anderswo verschoben oder gelöscht.
Die IMAP-Suche findet keine UID mehr; die Nachricht wurde in einem anderen Programm bewegt.
mail-flag-rejectedFür BetriebsinhaberDer Server hat die Markierung nicht übernommen / nicht entfernt. Möglicherweise ist der Ordner schreibgeschützt.
messageFlagsAdd/Remove lieferte false — schreibgeschützter Ordner oder der Server speichert das Flag nicht dauerhaft.
mail-copy-failedFür BetriebsinhaberDie Nachricht liess sich nicht in den Zielordner kopieren. Sie steht unverändert im Ursprungsordner.
IMAP COPY scheiterte — Zielordner nicht beschreibbar oder Kontingent erschöpft.
mail-original-not-removedFür BetriebsinhaberDie Kopie liegt im Zielordner, das Original liess sich aber nicht entfernen. Nach dem nächsten Abgleich steht die Nachricht zweimal da.
Nach erfolgreicher Kopie schlug das Löschen im Ursprungsordner fehl.
mail-folder-missingFür BetriebsinhaberDieses Postfach hat keinen Ordner „<Ordner>". Nach dem nächsten Abgleich ist er bekannt.
Für die Zielrolle (Papierkorb, Entwürfe, …) ist lokal kein Ordner bekannt.
mail-move-not-confirmedFür BetriebsinhaberDer Server hat die Nachricht nicht verschoben.
IMAP MOVE bestätigte den Vorgang nicht; die Nachricht blieb, wo sie war.
mail-source-failedFür BetriebsinhaberDer Quelltext der Nachricht liess sich nicht erzeugen. / Der Server hat die Ablage abgelehnt.
Beim Ablegen eines Entwurfs/Gesendet-Eintrags scheiterte das Erzeugen oder das APPEND auf dem Server.
ai-output-menuFür Betriebsinhaber · 502Die KI hat keine brauchbare Karte geliefert. Bitte erneut versuchen.
Die Modellausgabe verletzt generatedMenuSchema; die Route antwortet mit error 'ai_output'.
ai-output-productFür Betriebsinhaber · 502Die KI hat kein brauchbares Produkt geliefert. Bitte erneut versuchen.
Die Modellausgabe verletzt generatedProductSchema.
ai-refusedFür Betriebsinhaber · 502Die KI hat die Anfrage abgelehnt. Bitte formuliere den Wunsch anders.
Das Modell endete mit einer Ablehnung (refusal) statt mit einem Ergebnis.
ai-truncatedFür Betriebsinhaber · 502Die Antwort der KI wurde abgeschnitten. Bitte den Wunsch enger fassen.
Das Token-Limit (max_tokens) war erreicht, bevor die Antwort vollständig war.
ai-no-parsable-outputFür Betriebsinhaber · 502Die KI hat keine auswertbare Antwort geliefert.
Die Antwort enthält kein auswertbares JSON zum vorgegebenen Schema.
forbidden-products-writeFür Mitarbeiter · 403Zu jedem Gericht entsteht ein Produkt in der Warenwirtschaft. Dafür fehlt Dir das Schreibrecht auf Produkte.
Die Karten-Erzeugung legt Produkte an; ohne Modulrecht products:write ist das gesperrt.
internal-warenwirtschaftFür Betriebsinhaber · 500{"error":"internal"}
Unerwarteter Serverfehler in den Warenwirtschafts-Routen (gleich in raw-materials:119, recipes:68, suppliers:75, warehouses:85, ai/product:172).
validation-warenwirtschaftFür Betriebsinhaber · 400{"error":"validation","issues":[…]}
Die gesendeten Felder verletzen das Zod-Schema (fehlende Pflichtfelder, falsche Einheiten/Zahlen).
not-found-categoryFür Betriebsinhaber · 404{"error":"not_found"}
Die angegebene Kategorie bzw. das Produkt gehört nicht zu diesem Betrieb oder wurde gelöscht.
staff-role-owner-onlyFür Mitarbeiter · 403Nur der Inhaber darf Administrator- oder Manager-Rollen vergeben.
Ein Nicht-Inhaber versucht, eine Rolle mit Verwaltungsrechten zu vergeben (auch beim Ändern: staff/[id]/route.ts:105).
staff-rights-escalationFür Mitarbeiter · 403Diese Rechte besitzen Sie selbst nicht.
Es werden Modulrechte vergeben, die der Einladende selbst nicht hat (auch staff/[id]/route.ts:120); die betroffenen Module stehen in modules.
staff-already-memberFür Betriebsinhaber · 409Dieser Nutzer ist bereits Mitglied.
Zur eingeladenen E-Mail existiert schon eine Mitgliedschaft in diesem Betrieb.
staff-member-not-foundFür Betriebsinhaber · 404Mitglied nicht gefunden
Die Mitgliedschaft gehört nicht zu diesem Betrieb oder wurde bereits entfernt.
staff-owner-immutableFür Betriebsinhaber · 400Die Mitgliedschaft des Inhabers kann hier nicht geändert werden. / Der Inhaber kann nicht entfernt werden.
Der Inhaber ist gegen Rollenänderung und Entfernen geschützt (auch Zeile 189).
staff-self-changeFür Mitarbeiter · 403Die eigene Mitgliedschaft kann nur der Inhaber ändern.
Ein Nicht-Inhaber versucht, seine eigene Rolle oder Rechte zu ändern.
staff-invitation-not-foundFür Betriebsinhaber · 404Einladung nicht gefunden
Die Einladung gehört nicht zu diesem Betrieb oder wurde schon widerrufen bzw. angenommen.
team-user-not-registeredFür Betriebsinhaber · 404No user found with that email. They must register first.
Die alte Team-Route verlangt ein bestehendes Konto zur E-Mail-Adresse.
team-manager-owner-onlyFür Mitarbeiter · 403Nur der Inhaber darf die Manager-Rolle vergeben.
Ein Nicht-Inhaber versucht, die Manager-Rolle zu setzen.
invitation-not-foundFür Gäste · 404Einladung nicht gefunden.
Der Token im Link existiert nicht (Tippfehler, abgeschnittener Link, Einladung gelöscht).
invitation-revokedFür Gäste · 410Einladung wurde widerrufen.
revokedAt ist gesetzt — der Betrieb hat die Einladung zurückgezogen.
invitation-already-acceptedFür Gäste · 410Einladung wurde bereits angenommen.
acceptedAt ist gesetzt; der Link ist einmalig.
invitation-expiredFür Gäste · 410Einladung ist abgelaufen.
expiresAt liegt in der Vergangenheit.
invitation-no-longer-validFür Gäste · 410Einladung ist nicht mehr gültig.
Beim Annehmen ist die Einladung widerrufen, schon angenommen oder abgelaufen.
invitation-wrong-accountFür Gäste · 409Du bist mit einer anderen E-Mail angemeldet. Bitte melde dich ab und nimm die Einladung mit der eingeladenen Adresse an.
Die E-Mail der aktiven Sitzung stimmt nicht mit der eingeladenen Adresse überein.
invitation-account-existsFür Gäste · 401Für diese E-Mail existiert bereits ein Konto. Bitte melde dich an.
Zur eingeladenen Adresse gibt es schon ein Konto; requiresSignIn wird mitgeliefert.
invitation-signup-invalidFür Gäste · 400Name und Passwort (min. 8 Zeichen) sind erforderlich.
Beim Anlegen des Kontos über die Einladung fehlen Name oder ein Passwort mit mindestens 8 Zeichen.
invitation-load-failedFür GästeEinladung konnte nicht geladen werden. / Einladung konnte nicht angenommen werden.
Rückfalltexte der Einladungsseite, wenn die Antwort der API keinen eigenen Fehlertext trägt.
stripe-not-configuredFür Entwickler · 503{"error":"stripe_not_configured"}
Auf dem Server fehlen die Stripe-Schlüssel (auch portal/route.ts:25 und ai-credits/checkout/route.ts:31).
plan-price-missingFür Entwickler · 500Plan "<plan>" (<intervall>) ist nicht konfiguriert.
Für die Plan/Intervall-Kombination fehlt die Stripe-Price-ID in der Konfiguration.
stripe-errorFür Betriebsinhaber · 500{"error":"stripe_error"}
Stripe lehnte das Anlegen der Kundenportal-Sitzung ab (z. B. kein konfiguriertes Portal, unbekannter Customer).
unknown-packageFür Betriebsinhaber · 400{"error":"unknown_package"}
Das gewählte Guthaben-Paket ist nicht (mehr) in der Paketliste enthalten.
auto-recharge-no-payment-methodFür BetriebsinhaberDie letzte automatische Aufladung ist fehlgeschlagen (<Datum>): Keine Zahlungsmethode hinterlegt. Bitte im Kundenportal eine Karte speichern.
Beim Off-Session-Abbuchen war keine Standard-Zahlungsmethode am Stripe-Customer hinterlegt; die Automatik pausiert 24 h.
auto-recharge-payment-incompleteFür BetriebsinhaberDie letzte automatische Aufladung ist fehlgeschlagen (<Datum>): Zahlung nicht abgeschlossen (Status: <status>).
Der PaymentIntent endete nicht auf 'succeeded' — meist verlangt die Karte eine Freigabe (3DS), die off-session nicht geht, oder sie wurde abgelehnt.
webhook-stripe-not-configuredFür Entwickler · 503Stripe not configured
Der Webhook-Endpunkt wird aufgerufen, obwohl keine Stripe-Konfiguration vorliegt.
webhook-secret-missingFür Entwickler · 503STRIPE_WEBHOOK_SECRET is not set
Ohne Webhook-Secret kann die Signatur nicht geprüft werden; Zahlungen werden nicht gutgeschrieben.
webhook-invalid-signatureFür Entwickler · 400Invalid signature / Missing signature
Der stripe-signature-Header fehlt oder passt zu keinem der konfigurierten Secrets — bezahltes Guthaben wird nicht gebucht.
webhook-handler-errorFür Entwickler · 500Handler error
Ein Event-Handler warf (Plan-Aktivierung, Guthabenbuchung, Connect); Stripe wiederholt das Event.
webhook-missing-restaurant-metadataFür Entwickler[stripe-webhook] checkout.session.completed without restaurantId metadata (bzw. ai-credits session/intent without restaurantId metadata)
Die Stripe-Sitzung trägt keine restaurantId in den Metadaten — die Zahlung lässt sich keinem Betrieb zuordnen.
webhook-payment-method-not-savedFür Betriebsinhaber[stripe-webhook] Zahlungsmethode konnte nicht gespeichert werden
Die Standard-Zahlungsmethode ließ sich nicht am Abo vermerken; die automatische Aufladung findet später keine Karte.
import-internalFür Betriebsinhaber · 500{"error":"Interner Fehler"}
Unerwarteter Serverfehler beim Starten oder Abfragen eines Importlaufs (auch GET, Zeile 248).
invalid-json-bodyFür Entwickler · 400{"error":"Invalid JSON body"}
Der Anfragerumpf ist kein gültiges JSON (auch confirm:44, undo:36, tts:43, settings:42).
mailbox-internalFür Betriebsinhaber · 500{"error":"Internal Server Error"}
Unerwarteter Serverfehler in den Postfach-Routen (auch [id]/route.ts:164 und [id]/test/route.ts:99).
Reservierungen, Widget und Gast-Sicht
Reservierungen, Widget und Gast-Sicht · 121 Meldungen
subscription-inactive-configFür Betriebsinhaber · 403subscription_inactive (403) → Widget zeigt "Online-Reservierung derzeit nicht verfügbar / Bitte kontaktieren Sie das Restaurant direkt"
getRestaurantEntitlements meldet features.reservations = false, also kein aktives Reservierungs-Paket bzw. abgelaufenes Abo.
subscription-inactive-daysFür Betriebsinhaber · 403subscription_inactive
Kein aktives Reservierungs-Paket; die Tagesabfrage des Kalenders wird abgewiesen.
subscription-inactive-availabilityFür Betriebsinhaber · 403subscription_inactive
Kein aktives Reservierungs-Paket; das Widget schaltet auf den Hinweisschirm um (use-booking-flow.ts:246).
subscription-inactive-bookingFür Betriebsinhaber · 403subscription_inactive
Buchung wird blockiert, weil kein aktives Reservierungs-Paket vorliegt.
subscription-inactive-inquiryFür Betriebsinhaber · 403subscription_inactive
Auch die Gruppen-Anfrage braucht das Reservierungs-Paket.
restaurant-nicht-gefunden-configFür Betriebsinhaber · 404Restaurant nicht gefunden
Der slug im Einbettungs-Code (data-slug) passt zu keiner RestaurantOrganization.
restaurant-nicht-gefunden-daysFür Betriebsinhaber · 404Restaurant nicht gefunden
Unbekannter slug in der Tagesabfrage.
restaurant-nicht-gefunden-availabilityFür Betriebsinhaber · 404Restaurant nicht gefunden
Unbekannter slug in der Verfügbarkeitsabfrage.
restaurant-nicht-gefunden-bookingFür Betriebsinhaber · 404Restaurant nicht gefunden
Unbekannter slug beim Absenden der Buchung.
restaurant-nicht-gefunden-inquiryFür Betriebsinhaber · 404Restaurant nicht gefunden
Unbekannter slug beim Absenden der Anfrage.
invalid-query-daysFür Entwickler · 400invalid_query (mit issues aus Zod)
from/to/partySize fehlen oder haben falsches Format; auch ein Zeitraum über MAX_DAY_RANGE Tage fällt hier durch.
invalid-query-availabilityFür Entwickler · 400invalid_query (mit issues aus Zod)
date/partySize/area/inquiry passen nicht zum availabilityQuerySchema.
invalid-body-bookingFür Entwickler · 400invalid_body (mit issues aus Zod)
widgetReservationSchema abgelehnt: date/time-Format, partySize außerhalb 1–100, name leer oder >100, email >320 oder unzulässig, notes >1000, locale nicht in der Aufzählung, area keine UUID (src/lib/validations/reservations.ts:72).
invalid-body-group-answersFür Entwickler · 400invalid_body (mit issues aus Zod)
Der answers-Umschlag (groupAnswersEnvelopeSchema) passt nicht: mehr als MAX_ANSWERS Antworten oder falsche Feldform.
invalid-body-inquiryFür Entwickler · 400invalid_body (mit issues aus Zod)
widgetInquirySchema abgelehnt: partySize außerhalb 1–500, name leer, E-Mail/Telefon unzulässig, notes >1000 (src/lib/validations/inquiries.ts:48).
email-erforderlich-bookingFür Gäste · 400E-Mail erforderlich
ReservationWidgetSettings.requireEmail ist an, das Feld kam aber leer an.
telefon-erforderlich-bookingFür Gäste · 400Telefon erforderlich
ReservationWidgetSettings.requirePhone ist an, das Feld kam leer an.
telefon-erforderlich-inquiryFür Gäste · 400Telefon erforderlich
requirePhone ist an, die Anfrage kam ohne Nummer.
email-erforderlich-inquiryFür Gäste · 400E-Mail erforderlich
requireEmail ist an, die Anfrage kam ohne E-Mail.
kontaktweg-fehlt-inquiryFür Gäste · 400E-Mail oder Telefonnummer erforderlich
Weder E-Mail noch Telefon angegeben — der Betrieb könnte sich nicht zurückmelden.
field-invalid-pflichtfrageFür Gäste · 400Bitte beantworten Sie „<Frage>".
Eine als required markierte Zusatzfrage (GroupInquiryField) gilt ab dieser Personenzahl und blieb leer.
field-invalid-zahlFür Gäste · 400Bitte geben Sie bei „<Frage>" eine Zahl ein.
Zusatzfrage vom Typ NUMBER hat eine nicht-numerische Antwort erhalten.
field-invalid-auswahlFür Gäste · 400Bitte wählen Sie bei „<Frage>" eine der angebotenen Möglichkeiten.
Bei einer SELECT-Zusatzfrage kam ein Wert an, der nicht in options steht — oft eine im Dashboard gelöschte Option bei offenem Formular.
field-invalid-clientFür GästeBitte beantworten Sie diese Frage.
Client-Prüfung: Pflicht-Zusatzfrage offen; der Klick auf Absenden zeigt die Meldung am Feld statt zu senden (step-booking.tsx:151).
slot-unavailable-generischFür Gäste · 409Diese Uhrzeit wurde soeben vergeben. Bitte wählen Sie eine andere. (Text-Schlüssel slotTakenHint)
Jede 409-Antwort der Buchungsroute landet hier — der präzise Servertext (guard.message) wird verworfen und pauschal ersetzt.
unavailable-409Für Gäste · 409{ error: "unavailable", reason, message } — message ist bereits deutscher Klartext
assertBookable hat beim erneuten, verbindlichen Prüfen in der Transaktion abgelehnt (SlotUnavailableError, Zeile 315).
invalid-dateFür Entwickler · 409Das Datum passt nicht zur Anfrage.
Das gesendete Datum stimmt nicht mit dem geladenen Verfügbarkeitskontext überein — praktisch nur bei nachgebauten Requests.
invalid-timeFür Gäste · 409Diese Uhrzeit wird für den gewählten Tag nicht angeboten.
Die Uhrzeit liegt nicht im Slot-Raster des Tages bzw. des gewählten Bereichs.
invalid-rangeFür Gäste · 409Die Endzeit muss nach der Startzeit liegen.
Die übermittelte Endzeit liegt vor oder auf der Startzeit (end-times.ts:86).
end-time-requiredFür Gäste · 409Bitte eine Endzeit wählen.
Für Datum und Uhrzeit greift eine Sloteinstellung mit Endzeit-Pflicht, es kam aber keine Endzeit an.
invalid-end-timeFür Gäste · 409Diese Endzeit ist für die gewählte Uhrzeit nicht verfügbar.
Die Endzeit steht nicht im Endzeit-Raster der gewählten Startzeit (getEndTimeGrid).
closedFür Gäste · 409An diesem Tag ist keine Online-Reservierung möglich.
Keine Öffnungszeit für Tag/Bereich hinterlegt oder der Tag ist als Ruhetag angelegt.
blockedFür Gäste · 409Dieser Zeitraum ist gesperrt.
Eine Sperrzeit/Schließung (Betriebsfeier, Urlaub) deckt den Zeitraum ab.
limitFür Gäste · 409Für diesen Zeitraum sind bereits alle Reservierungen vergeben.
Das Kontingent (maximale Reservierungen je Zeitfenster) ist erschöpft.
capacityFür Gäste · 409Für diese Personenzahl ist zu dieser Zeit kein Tisch mehr frei.
findBestAssignment findet keine (kombinierbare) Tischgruppe für partySize inklusive Puffer.
advanceFür Gäste · 409Diese Uhrzeit liegt außerhalb des Buchungszeitraums.
minAdvanceHours, maxAdvanceDays oder sameDayCutoffTime schließen den Zeitpunkt aus.
party-sizeFür Gäste · 409Für diese Personenzahl ist keine Online-Reservierung möglich.
partySize liegt außerhalb minPartySizeOnline / maxPartySizeOnline.
unknown-areaFür Gäste · 400Dieser Bereich steht nicht zur Auswahl.
Die areaId gehört zu keinem Bereich dieses Betriebs (fremd, gelöscht, nie existiert — bewusst nicht unterschieden).
area-not-bookableFür Gäste · 400Dieser Bereich kann online nicht reserviert werden.
RestaurantArea.onlineBookable ist false.
sub-area-not-selectableFür Gäste · 400In diesem Bereich lässt sich kein Unter-Bereich wählen.
Der Hauptbereich hat allowSubAreaSelection = false, es wurde aber ein Unterbereich gesendet.
followup-unavailableFür Gäste · 409Für den Anschluss ist zu dieser Zeit leider kein Platz mehr frei.
Die angehakte Folgereservierung („noch an die Bar") ist nicht buchbar; die Transaktion nimmt die Hauptbuchung mit (reservations/route.ts:375).
followup-endzeit-fehltFür GästeBitte wählen Sie eine Endzeit, damit wir den Anschluss reservieren können.
Client-Prüfung: der Folgereservierungs-Haken ist gesetzt, der Slot bietet Endzeiten an, es ist aber keine gewählt (step-booking.tsx:124).
reservierung-fehlgeschlagenFür Entwickler · 500Reservierung fehlgeschlagen
Unerwarteter Fehler in der Buchungstransaktion (DB nicht erreichbar, Prisma-Fehler). Details nur im Serverlog.
anfrage-fehlgeschlagenFür Entwickler · 500Anfrage fehlgeschlagen
Unerwarteter Fehler beim Anlegen der Gruppen-Anfrage.
interner-fehler-configFür Entwickler · 500Interner Fehler → im Widget als "Widget nicht verfügbar"
Config-Route wirft (DB/Prisma). Das Widget setzt daraufhin flow.error und zeigt nur den Text in Rot (book/[slug]/page.tsx:142).
interner-fehler-availabilityFür Entwickler · 500Interner Fehler → im Widget als "Verfügbarkeit konnte nicht geladen werden"
Verfügbarkeitsberechnung wirft; use-booking-flow.ts:252 setzt den Ersatztext.
interner-fehler-daysFür Entwickler · 500Interner Fehler — vom Kalender STILL verschluckt
Bei nicht-ok Antwort bricht loadMonth ohne Meldung ab (date-field.tsx:75); der Monat bleibt einfach ohne Tagesstatus.
widget-nicht-verfuegbarFür EntwicklerWidget nicht verfügbar
Die Config-Antwort war nicht ok (oder 403 ohne subscription_inactive).
rate-limited-bookingFür Gäste · 429rate_limited (Retry-After-Header) — der Gast sieht den rohen Schlüssel "rate_limited"
Mehr als 10 Buchungen pro Stunde je IP und Betrieb (rate-limit.ts:267). Der 429-Zweig fehlt in use-booking-flow, deshalb landet der Schlüssel als Fehlertext im Formular.
rate-limited-inquiryFür Gäste · 429rate_limited
Mehr als 10 Anfragen pro Stunde je IP und Betrieb. CORS-Header werden hier bewusst nachgesetzt, damit keine Netzwerkfehler-Meldung entsteht.
rate-limited-availabilityFür Gäste · 429rate_limited — im Widget als "Verfügbarkeit konnte nicht geladen werden"
Mehr als 60 Verfügbarkeitsabfragen pro Minute je IP und Betrieb, etwa durch sehr schnelles Durchklicken.
rate-limited-daysFür Gäste · 429rate_limited — vom Kalender still verschluckt
Mehr als 60 Tagesabfragen pro Minute je IP und Betrieb (schnelles Monats-Blättern).
rate-limited-payment-statusFür Gäste · 429rate_limited
Zu häufiges Nachfragen des Zahlungsstands (Knopf "Erneut prüfen").
payment-not-foundFür Gäste · 404not_found → Seite zeigt "Zahlung nicht abgeschlossen"
Die paymentId existiert nicht oder gehört nicht zu diesem Betrieb. Bewusst nicht unterschieden, weil die Kennung in einer URL steht.
payment-status-unavailableFür Gäste · 500status_unavailable → Seite zeigt "Stand nicht abrufbar"
Abgleich mit Stripe bzw. DB-Zugriff scheiterte.
zahlung-nicht-abgeschlossenFür GästeZahlung nicht abgeschlossen — "Die Zahlung wurde abgebrochen oder abgelehnt … Reservierung ist damit nicht verbindlich"
Rückkehr mit ?status=abbruch oder der Zahlungsstand ist nicht PENDING/PAID/AUTHORIZED (FAILED, CANCELED).
zahlung-noch-nicht-bestaetigtFür GästeZahlung noch nicht bestätigt
Der Zahlungsstand steht nach dem Nachfassen weiterhin auf PENDING; Stripe hat den Webhook noch nicht geliefert.
payment-amount-out-of-rangeFür Betriebsinhaber(keine Gast-Meldung) skipped: "amount_out_of_range"
Der Betrag der Anzahlungs-/Gebührenregel liegt außerhalb des zulässigen Bereichs; es wird keine Zahlung angelegt.
payment-kein-stripe-kontoFür Betriebsinhaber[payments] no active Stripe connection — booking without charge (nur Serverlog)
Eine Anzahlungs-/Gebührenregel greift, aber kein aktives Stripe-Konto ist verbunden.
payment-stripe-errorFür Betriebsinhaberskipped: "stripe_error"; Zahlung wird auf FAILED mit failureReason gesetzt
Das Anlegen der Stripe-Kassenseite scheiterte. Die Buchung bleibt bestehen, checkoutUrl ist null.
requires-reviewFür BetriebsinhaberrequiresReview: true → neutrale "vorgemerkt"-Bestätigung statt Zusage
Der Gast ist als gesperrt eingestuft (upsertGuestFromReservation, Zeile 427) oder eine Anzahlung ist offen; autoConfirm wird unterdrückt.
risiko-einstufung-nicht-moeglichFür Entwickler[widget] Risiko-Einstufung nicht moeglich: <Fehlername> (nur Serverlog)
getGuestRiskLevel warf; riskLevel bleibt null und risikogebundene Anzahlungsregeln greifen nicht.
reservation-email-failedFür Betriebsinhaber[widget] reservation email failed (nur Serverlog)
Der Versand der Bestätigungs-/Vormerk-Mail scheiterte nach dem Commit. Die Buchung steht trotzdem.
newsletter-optin-failedFür Betriebsinhaber[widget] newsletter opt-in failed (nur Serverlog)
Die Double-Opt-In-Mail für den Newsletter-Haken konnte nicht verschickt werden.
newsletter-invalid-jsonFür Entwickler · 400Invalid JSON body
Der Request-Body ist kein gültiges JSON.
newsletter-validationFür Gäste · 400validation (mit issues aus Zod)
E-Mail-Adresse oder Name entspricht nicht dem Schema.
newsletter-restaurant-nicht-gefundenFür Betriebsinhaber · 404Restaurant nicht gefunden
Unbekannter slug in der Newsletter-Anmeldung.
newsletter-interner-fehlerFür Entwickler · 500<roher err.message> bzw. "Fehler bei der Anmeldung"
Unerwarteter Fehler; die interne Fehlermeldung wird ungefiltert an den Gast zurückgegeben.
newsletter-confirm-link-unvollstaendigFür GästeDer Bestätigungslink ist unvollständig. Bitte melde dich erneut an.
Der token-Parameter fehlt in der URL, meist durch einen vom Mailprogramm abgeschnittenen Link.
newsletter-confirm-restaurant-fehltFür GästeDas Restaurant wurde nicht gefunden.
Der slug im Bestätigungslink gehört zu keinem Betrieb mehr.
newsletter-confirm-token-ungueltigFür GästeDieser Bestätigungslink ist ungültig oder wurde bereits verwendet.
Kein Gast mit diesem newsletterToken — Token schon verbraucht oder falsch.
newsletter-confirm-abgelaufenFür GästeDieser Bestätigungslink ist abgelaufen. Bitte melde dich erneut zum Newsletter an.
newsletterTokenExpiresAt liegt in der Vergangenheit; die Gültigkeit beträgt 7 Tage (newsletter/route.ts:93).
newsletter-abmeldelink-unvollstaendigFür GästeDer Abmeldelink ist unvollständig. Bitte verwende den Link aus einer unserer E-Mails.
Der token-Parameter fehlt in der Abmelde-URL.
newsletter-abmelde-restaurant-fehltFür GästeDas Restaurant wurde nicht gefunden.
Der slug im Abmeldelink gehört zu keinem Betrieb.
newsletter-abmeldelink-ungueltigFür GästeDieser Abmeldelink ist ungültig. Möglicherweise bist du bereits abgemeldet.
Kein Gast zu diesem Abmelde-Token gefunden — meist weil die Abmeldung bereits erfolgt ist.
storno-invalid-bodyFür Entwickler · 400invalid_body
Der Request-Body ist kein gültiges JSON.
storno-invalid-inputFür Entwickler · 400invalid_input
Der hash im Body passt nicht zum guestSelfServiceSchema (Format).
storno-not-foundFür Gäste · 404not_found → der Gast sieht "Stornierung fehlgeschlagen. Bitte versuchen Sie es erneut."
Reservierung unbekannt ODER changeHash stimmt nicht (bewusst nicht unterschieden). Die Client-Meldung nennt den Grund nicht (cancel-button.tsx:84).
storno-already-finalizedFür Gäste · 409already_finalized → "Diese Reservierung kann nicht mehr storniert werden."
Die Reservierung steht bereits auf CANCELED oder COMPLETED.
storno-rate-limitedFür Gäste · 429Zu viele Anfragen. Bitte versuchen Sie es später erneut.
Mehr als 10 Storno-Versuche pro Stunde je IP (cancel/route.ts:54).
storno-netzwerkfehlerFür GästeNetzwerkfehler. Bitte versuchen Sie es erneut.
Der fetch selbst warf — keine Verbindung oder abgebrochene Anfrage.
manage-link-404Für Gäste · 404(Next.js-404-Seite, keine eigene Erklärung)
notFound() bei fehlendem hash-Parameter (Zeile 34), nicht passender Reservierung (43) oder fehlendem Betrieb (49).
vorschlag-link-ungueltig-seiteFür GästeDieser Link ist nicht mehr gültig — "Der Vorschlag wurde möglicherweise bereits angenommen, ist abgelaufen oder wurde durch einen neueren ersetzt."
Ein Sammelbildschirm für Token-Formatfehler (Zeile 29), Seiten-Bremse (40), unbekanntes Token (44), evaluateProposal-Absage (47) und fehlenden Betrieb (60).
vorschlag-invalidFür Gäste · 404{ error: "invalid", message: "Dieser Link ist nicht mehr gültig." }
Neutrale Absage für Token-Formatfehler, unbekanntes Token oder abgelehnte acceptProposal (verbraucht, abgelaufen, Reservierung geschlossen — proposals.ts:134-139).
vorschlag-invalid-inputFür Entwickler · 400invalid_input
Der Body entspricht nicht dem proposalAcceptSchema (confirm: true fehlt).
vorschlag-annahme-ungueltigFür GästeDieser Link ist nicht mehr gültig. Bitte wenden Sie sich an das Restaurant.
Jede nicht-ok Antwort außer 429 wird hier zusammengefasst (abgelaufen, verbraucht, unbekannt).
vorschlag-rate-limitedFür Gäste · 429Zu viele Versuche. Bitte versuchen Sie es später erneut.
20 Annahmen pro Stunde je IP oder 10 je Token überschritten (route.ts:47, 59).
vorschlag-netzwerkfehlerFür GästeNetzwerkfehler. Bitte versuchen Sie es erneut.
Der fetch warf — keine Verbindung.
vorschlag-mail-failedFür Betriebsinhaber[proposal-accept] confirmation email failed (nur Serverlog)
Die Bestätigungsmail nach angenommenem Vorschlag scheiterte; die Annahme bleibt bewusst bestehen.
loader-data-slug-missingFür Betriebsinhaber[TacticTable Widget] data-slug attribute missing
Das Script-Tag hat kein oder ein leeres data-slug; der Loader bricht sofort ab und rendert nichts.
loader-config-unreachableFür Betriebsinhaber[TacticTable Widget] Konfiguration nicht erreichbar — nutze Inline-Modus.
Der fetch auf /api/widget/<slug>/config warf (CORS, Netz, Content-Security-Policy der Wirt-Seite). Der Loader fällt still auf den Inline-Modus zurück.
loader-config-unlesbarFür Betriebsinhaber[TacticTable Widget] Konfiguration nicht lesbar — nutze Inline-Modus.
Die Config-Antwort war ein Fehlerobjekt (404 Restaurant, 403 subscription_inactive) — erkannt an raw.error (Zeile 367).
loader-zielbereich-nicht-gefundenFür Betriebsinhaber[TacticTable Widget] Zielbereich "<selector>" nicht gefunden — Formular am Seitenende eingefuegt.
data-target zeigt auf ein Element, das es nicht gibt (oder der Selektor ist ungültig und querySelector warf).
loader-script-im-headFür Betriebsinhaber[TacticTable Widget] Das Script-Tag steht im <head>; dort waere das Formular unsichtbar. Es wurde am Seitenende eingefuegt — mit data-target="#auswahl" platzieren Sie es genau.
CMS-Erweiterungen (Joomla, Shopware, TYPO3, Contao) hängen das Script in den <head>; dort gilt display:none.
loader-kein-einfuegepunktFür Betriebsinhaber[TacticTable Widget] Kein Einfuegepunkt gefunden — Formular am Seitenende eingefuegt.
Das Script-Tag hat keinen parentNode (etwa dynamisch eingefügt und wieder entfernt).
loader-kein-bodyFür Betriebsinhaber[TacticTable Widget] Kein <body> vorhanden — Formular nicht eingefuegt.
Weder data-target noch document.body vorhanden; es wird nichts gerendert.
loader-unbekannter-modeFür Betriebsinhaber[TacticTable Widget] Unbekannter data-mode "<wert>" — nutze die Dashboard-Einstellung.
data-mode enthält einen Wert, den der Loader nicht kennt (Tippfehler).
cors-origin-nullFür Betriebsinhaber(keine Meldung — der Browser blockt; die Wirt-Seite sieht nur einen CORS-Fehler)
Ist allowedOrigins gefüllt und die aufrufende Herkunft nicht darin, liefert der Header Access-Control-Allow-Origin: null.
frame-ancestors-blockiertFür Betriebsinhaber(keine Meldung — leerer iFrame; Browser meldet frame-ancestors-Verstoß in der Konsole)
Die CSP auf /book/<slug> erlaubt nur bekannte Herkünfte als Einbettung; eine nicht eingetragene Domain sieht ein leeres Frame.
widget-frame-unavailableFür Entwickler · 503{ error: "unavailable" }
Der Nachschlag der frame-ancestors-Regel scheiterte (DB). Bewusst 503 statt null, damit die Middleware es nur 10 Sekunden merkt.
phone-emptyFür GästeBitte eine Telefonnummer angeben.
Pflichtfeld Telefon ist leer (requirePhone aktiv); angezeigt am Feld, sobald es berührt wurde (phone-field.tsx:123).
phone-invalidFür GästeDiese Telefonnummer enthält unzulässige Zeichen.
Die Eingabe enthält Zeichen außerhalb des erlaubten Musters (phone.ts:167).
phone-unknown-countryFür GästeDiese Ländervorwahl kennen wir nicht.
Die Vorwahl passt zu keinem Eintrag der Länderliste (phone.ts:188, 194).
phone-too-shortFür GästeDiese Telefonnummer ist zu kurz.
Die nationale Nummer bleibt unter der Mindestlänge des Landes (phone.ts:204).
phone-too-longFür GästeDiese Telefonnummer ist zu lang.
Die nationale Nummer überschreitet die Höchstlänge des Landes oder MAX_PHONE_INPUT.
absenden-still-gesperrtFür Gäste(keine Meldung — der Absenden-Knopf ist einfach deaktiviert)
canSubmit ist false: Uhrzeit oder Pflicht-Endzeit fehlt, Name leer, Pflicht-E-Mail leer oder die Telefonnummer nicht parsebar (Zeile 126-139).
slot-label-closedFür Gäste<HH:mm> — geschlossen
Die Verfügbarkeitsroute liefert reason "closed" für diese Startzeit.
slot-label-blockedFür Gäste<HH:mm> — gesperrt
Eine Sperrzeit überdeckt die Startzeit.
slot-label-limitFür Gäste<HH:mm> — Kontingent erreicht
Das Reservierungskontingent des Zeitfensters ist ausgeschöpft.
slot-label-capacityFür Gäste<HH:mm> — ausgebucht
Kein passender Tisch für die Personenzahl frei.
slot-label-advanceFür Gäste<HH:mm> — zu kurzfristig
minAdvanceHours bzw. sameDayCutoffTime schließt die Uhrzeit aus.
slot-label-nicht-verfuegbarFür Gäste<HH:mm> — nicht verfügbar
Der Server schickte keinen oder einen unbekannten reason-Wert.
tag-blockedFür GästeNicht buchbar (Tooltip/Vorlesetext am Kalendertag)
Der Tag hat den Status "blocked"; ein Freitext des Betriebs ersetzt diesen Standardtext, wenn vorhanden (date-field.tsx:121).
tag-closedFür GästeGeschlossen
Für diesen Wochentag bzw. Bereich ist keine Öffnungszeit hinterlegt.
tag-pastFür GästeVergangen
Der Tag liegt vor heute (date-field.tsx:117).
tag-fullFür GästeAusgebucht
Der Tag bietet für diese Personenzahl keine freie Startzeit mehr.
tag-ausserhalb-buchungszeitraumFür GästeAußerhalb des Buchungszeitraums (Text-Schlüssel dateOutOfWindow)
Der Tag liegt jenseits von maxAdvanceDays.
unknown-area-dashboardFür Mitarbeiter · 400Dieser Bereich gehört nicht zu diesem Betrieb.
Beim Anlegen aus dem Dashboard verweist areaId auf einen fremden Bereich.
unknown-table-dashboardFür Mitarbeiter · 400Mindestens ein Tisch gehört nicht zu diesem Betrieb.
Eine gesendete tableId gehört zu einem anderen Betrieb oder wurde gelöscht.
conflict-dashboardFür Mitarbeiter · 409{ error: "conflict", conflicts: [...] }
Die gewählten Tische sind im Zeitfenster bereits belegt (Doppelbuchungsschutz).
vorschlag-text-fehltFür Mitarbeiter · 400Bitte einen Text für den Gast schreiben.
messageHtml ist leer; ohne Text erhielte der Gast eine nackte Mail.
Waechter, Rechte, Plaene, Ratenbegrenzung
Waechter, Rechte, Plaene, Ratenbegrenzung (401/402/403/404/429, KI-Guthaben, Middleware) · 62 Meldungen
unauthorizedFür Entwickler · 401{"error":"unauthorized"} (HTTP 401)
Der zentrale Waechter fuer /api/restaurants/[slug]/... fand keine angemeldete Sitzung (currentUser() ist null).
not-found-restaurantFür Betriebsinhaber · 404{"error":"not_found"} (HTTP 404)
Kein Betrieb mit diesem Slug bzw. dieser ID vorhanden; der Waechter sucht ueber OR: [{slug},{id}].
partner-link-keine-verbindungFür Betriebsinhaber · 409Dieser Betrieb ist mit keiner Agentur verbunden.
Der Eigentuemer wollte die Betreuung beenden, am Betrieb haengt aber gar keine Agentur (partnerId ist null) — meist eine veraltete Seite.
partner-link-geaendertFür Betriebsinhaber · 409Die Betreuung hat sich gerade geändert. Bitte laden Sie die Seite neu.
Zwischen dem Laden der Seite und dem Klick auf 'Verbindung loesen' hat sich partnerId geaendert; der Schreibbefehl traegt die erwartete Agentur im where und hat deshalb nichts getroffen.
link-request-nur-kennungFür Agenturen · 400Bitte geben Sie die Kennung des Betriebs an — eine E-Mail-Adresse ist hier nicht möglich.
Die Agentur hat eine Mailadresse als Ziel angegeben. Der Weg ueber die Adresse ist abgeschaltet: er verriet zu jeder fremden Adresse Name und Kennung des zugehoerigen Betriebs.
link-request-sperrfristFür Agenturen · 409Dieser Eigentümer hat eine Anfrage von Ihnen bereits abgelehnt.
Nach einer Ablehnung gilt eine Sperrfrist von 90 Tagen fuer dasselbe Paar Agentur/Betrieb (LINK_DECLINE_COOLDOWN_DAYS).
forbidden-owner-onlyFür Mitarbeiter · 403{"error":"forbidden"} (HTTP 403)
Die Route ist mit ownerOnly: true markiert (zerstoerende Vorgaenge, Eigentum, Abrechnung) und der Aufrufer ist nicht der Eigentuemer — auch ein Mitarbeiter und ein Mitglied der betreuenden Agentur nicht. Bis zur Korrektur wurde die Marke im Agentur-Zweig gar nicht geprueft.
forbidden-moduleFür Mitarbeiter · 403{"error":"forbidden","module":"<modul>","op":"read|write"} (HTTP 403)
hasPermission() verneint: die Rolle bzw. die gespeicherten granularen Rechte der Mitgliedschaft deckten Modul + Operation nicht.
forbidden-no-membershipFür Mitarbeiter · 403{"error":"forbidden"} (HTTP 403)
Angemeldet, aber weder Eigentuemer noch Mitglied des Betriebs noch Mitglied der verwaltenden Agentur.
forbidden-partner-excluded-moduleFür Mitarbeiter · 403{"error":"forbidden","module":"inbox|emailAccounts","op":"..."} (HTTP 403)
Agentur-Zugang hat Vollzugriff, ausser auf PARTNER_EXCLUDED_MODULES ('inbox', 'emailAccounts') — dort liegen fremde Personendaten.
unauthorized-partnerFür Entwickler · 401{"error":"unauthorized"} (HTTP 401)
guardPartnerApi ohne angemeldete Sitzung aufgerufen.
not-found-partnerFür Betriebsinhaber · 404{"error":"not_found"} (HTTP 404)
Keine PartnerOrganization mit dieser ID oder diesem Slug.
forbidden-partner-roleFür Mitarbeiter · 403{"error":"forbidden"} (HTTP 403)
Drei Faelle: ownerOnly und nicht Eigentuemer der Agentur (216), keine PartnerMembership (223), Rolle unter minRole (Standard PARTNER_ADMIN, 227).
action-nicht-angemeldetFür Betriebsinhaber · 401Nicht angemeldet.
Server-Action-Waechter ohne Sitzung; wird per throwIfDenied als Toast gezeigt.
action-restaurant-nicht-gefundenFür Betriebsinhaber · 404Restaurant nicht gefunden.
Der Slug/die ID der Server-Action zeigt auf keinen bestehenden Betrieb.
action-keine-berechtigungFür Mitarbeiter · 403Keine Berechtigung.
Server-Action verweigert: fehlendes Modul-Recht (79) oder gar keine Mitgliedschaft/Agentur-Zugang (88). Der Fall ownerOnly (67) traegt eine eigene Meldung: 'Das darf nur der Eigentuemer des Betriebs.'
trial-expiredFür Betriebsinhaber · 402Die Testphase ist abgelaufen. Bitte wähle einen Plan, um weiterzuarbeiten. / Antwort: {"error":"trial_expired","reason":"trial_expired","feature":…,"requiredPlan":…} (HTTP 402)
Die 30-Tage-Testphase ist vorbei und es wurde kein Plan gebucht (ent.requiresPlanSelection). Alle Plan-Features fallen weg.
plan-upgrade-requiredFür Betriebsinhaber · 402Feature "<Label>" ist im aktuellen Plan nicht enthalten. / Antwort: {"error":"plan_upgrade_required","feature":…,"label":…,"requiredPlan":…} (HTTP 402)
Ein Abo laeuft, aber isFeatureOnPlan() verneint das Feature fuer den gebuchten Plan (Matrix in src/lib/plan-features.ts:57-148).
plan-guard-not-foundFür Entwickler · 404{"error":"not_found"} (HTTP 404)
requireFeatureBySlug fand keinen Betrieb zu diesem Slug (findUnique auf slug, ohne ID-Fallback).
plan-auswahl-weiterleitungFür BetriebsinhaberWeiterleitung auf /restaurant/<slug>/select-plan
ent.requiresPlanSelection ist true und der Aufrufer ist der echte Eigentuemer (kein Agentur-Mitglied, kein Mitarbeiter).
testphase-abgelaufen-bannerFür BetriebsinhaberDeine Testphase ist abgelaufen. Wähle jetzt einen …
ent.trialExpired ist true — kein Abo und trialEndsAt liegt in der Vergangenheit.
feature-gate-seiteFür BetriebsinhaberDeine Testphase ist abgelaufen / "<Label>" freischalten — Verfügbar im Plan <Name>.
Serverseitige bzw. clientseitige Feature-Sperre: ent.features[feature] ist false; der Text unterscheidet abgelaufene Testphase von fehlendem Plan-Feature.
rate-limitedFür Entwickler · 429{"error":"rate_limited","retryAfterSeconds":<n>} (HTTP 429, Header Retry-After)
Der Sliding-/Fixed-Window-Zaehler fuer den Schluessel hat max ueberschritten. Speicher ist Upstash-Redis, sonst prozesslokal.
rate-limit-widget-bookingFür Gäste · 429HTTP 429 rate_limited (Buchung)
Mehr als 10 Buchungsversuche pro Stunde je IP und Betrieb (Schluessel widget-booking:<ip>:<slug>).
rate-limit-widget-inquiryFür Gäste · 429HTTP 429 rate_limited (Tisch-Anfrage, mit CORS-Headern)
Mehr als 10 Gruppen-Anfragen pro Stunde je IP und Betrieb.
rate-limit-widget-availabilityFür Gäste · 429HTTP 429 rate_limited (Verfügbarkeit/Tage)
Mehr als 60 Abrufe pro Minute je IP und Betrieb — meist eine Schleife im einbettenden Code, nicht ein Gast.
rate-limit-widget-paymentFür Gäste · 429HTTP 429 rate_limited (Zahlungsstatus)
Mehr als 40 Abrufe in 15 Minuten je IP und Betrieb waehrend der Anzahlung.
rate-limit-guest-cancelFür Gäste · 429HTTP 429 rate_limited (Stornierung durch den Gast)
Mehr als 10 Storno-Versuche pro Stunde je IP.
rate-limit-proposal-acceptFür Gäste · 429HTTP 429 rate_limited (Terminvorschlag annehmen)
Zwei Eimer: 20 Versuche/Stunde je IP und 10 Versuche/Stunde je Token-Hash.
vorschlag-link-ungueltigFür GästeDieser Link ist nicht mehr gültig — Der Vorschlag wurde möglicherweise bereits angenommen, ist abgelaufen oder wurde durch einen neueren ersetzt.
Auch der Seitenaufruf ist gebremst (60/Stunde je IP); bei Ueberschreitung zeigt die Seite denselben neutralen Text wie bei ungueltigem Token — absichtlich, um Token-Durchprobieren nicht zu verraten.
rate-limit-trackFür Entwickler · 204HTTP 204 (stille Verwerfung, keine Meldung)
Mehr als 240 Reichweiten-Beacons pro Minute je IP; die Route antwortet absichtlich 204 statt 429.
rate-limit-dashboardFür Betriebsinhaber · 429HTTP 429 rate_limited (Dashboard-Karten)
Mehr als 240 Abrufe pro Minute je Nutzerkennung (Echtzeit- und Protokollkarte teilen den Eimer). Die Echtzeitkarte fragt alle 5 Sekunden.
rate-limit-notificationsFür Betriebsinhaber · 429HTTP 429 rate_limited (Glocke)
Mehr als 240 Abrufe pro Minute je Nutzerkennung ueber Liste, Zaehler und "gesehen" zusammen.
rate-limit-ai-agentFür Betriebsinhaber · 429HTTP 429 rate_limited (Assistent)
Je Betrieb und Nutzer: 20 Chat-Laeufe, 60 Bestaetigungen, 60 Sprach-Aufrufe pro 5 Minuten.
rate-limit-ww-aiFür Betriebsinhaber · 429HTTP 429 rate_limited (KI Produkt/Speisekarte)
15 KI-Produkte bzw. 5 KI-Speisekarten pro Stunde je Betrieb. Die Bremse steht bewusst VOR der Guthabenpruefung.
rate-limit-theme-aiFür Betriebsinhaber · 429HTTP 429 rate_limited (KI-Theme)
Mehr als 5 KI-Theme-Generierungen in 30 Minuten je Betrieb.
rate-limit-website-importFür Betriebsinhaber · 429Zu viele Analysen. Bitte kurz warten. / Zu viele Imports. Bitte kurz warten. (HTTP 429)
Mehr als 3 Website-Analysen in 10 Minuten je Betrieb (Schluessel website-import:<restaurantId>).
rate-limit-data-importFür Betriebsinhaber · 429HTTP 429 rate_limited (Datenimport)
Mehr als 5 Importlaeufe in 10 Minuten je Betrieb.
rate-limit-website-inspirationsFür Betriebsinhaber · 429HTTP 429 rate_limited (Inspirationen)
Mehr als 30 Speichervorgaenge in 10 Minuten je Betrieb.
rate-limit-proposal-createFür Mitarbeiter · 429HTTP 429 rate_limited (Terminvorschlag verschicken)
Mehr als 30 Vorschlaege pro Stunde je Nutzer und Betrieb — verhindert das Zumuellen eines Gast-Postfachs unter dem Namen des Betriebs.
rate-limit-mailbox-testFür Betriebsinhaber · 429HTTP 429 rate_limited (Postfach-Test)
Zwei Eimer: 10 Tests je Postfach und 30 Tests je Nutzer in 10 Minuten.
rate-limit-domain-host-guideFür BetriebsinhaberKeine Fehlermeldung — die KI-Ergaenzung entfaellt still
Mehr als 3 KI-Ergaenzungen in 24 Stunden je Betrieb; bei Ueberschreitung wird nur der bezahlte Aufruf uebersprungen, die Anleitung kommt trotzdem.
rate-limit-registerFür Gäste · 429HTTP 429 rate_limited (Registrierung)
Mehr als 5 Registrierungen pro Stunde je IP.
rate-limit-resend-verificationFür Gäste · 429Zu viele Anfragen. Bitte kurz warten. (HTTP 429)
Eine Bestaetigungsmail alle 30 Sekunden je Adresse und 20 pro Stunde je IP.
rate-limit-forgot-reset-passwordFür Gäste · 429HTTP 429 rate_limited (Passwort vergessen / zuruecksetzen)
10 Anfragen/Stunde je IP und 3/Stunde je E-Mail-Adresse; Zuruecksetzen 10/Stunde je IP.
rate-limit-restaurant-createFür Betriebsinhaber · 429HTTP 429 rate_limited
Mehr als 3 Betriebsanlagen pro Stunde je Nutzerkonto.
restaurant-create-harte-grenzeFür Betriebsinhaber · 429Du hast in kurzer Zeit sehr viele Betriebe angelegt. Bitte melde dich bei uns, wenn du mehr brauchst. (HTTP 429)
Zusaetzliche Zaehlung in der Datenbank: 5 Betriebe im Bremsfenster. Sie greift auch, wenn die prozesslokale Bremse nach einem Kaltstart leer ist.
ai-credits-exhaustedFür Betriebsinhaber · 402Dein KI-Guthaben ist aufgebraucht. Lade Guthaben auf, um KI-Funktionen weiter zu nutzen. / {"error":"ai_credits_exhausted","balanceMicros":…,"topUpUrl":…} (HTTP 402)
checkAiCredits fand balanceMicros <= 0; jeder KI-Aufruf prueft das Guthaben vorab. Partner-verwaltete Betriebe sind ausgenommen.
ai-credits-error-actionFür Entwickler · 402Dein KI-Guthaben ist aufgebraucht. Bitte lade KI-Guthaben auf, um fortzufahren.
Server Actions koennen keinen Status 402 setzen; sie geben deshalb ein AiCreditsExhaustedResult zurueck statt zu werfen.
ai-credits-exhausted-agentFür BetriebsinhaberDas KI-Guthaben ist aufgebraucht. (SSE-Ereignis type: "error", code: "ai_credits_exhausted")
Das Guthaben ist mitten im laufenden Assistenten-Lauf leer; der Lauf wird auf status 'error' gesetzt.
ai-credits-lowFür BetriebsinhaberKI-Guthaben wird knapp — nur noch … / KI-Guthaben aufgebraucht. KI-Funktionen sind pausiert, bis du Guthaben auflädst.
ent.ai.low (Guthaben unter AI_CREDIT_LOW_WARNING_CENTS) bzw. ent.ai.exhausted (<= 0).
unauthenticatedFür Entwickler · 401{"error":"unauthenticated"} (HTTP 401)
Die Middleware sieht keine Sitzung und der Pfad ist nicht in PUBLIC_PATHS (src/middleware.ts:160-231). API-Pfade bekommen JSON statt einer Weiterleitung.
signin-redirectFür BetriebsinhaberWeiterleitung auf /restaurant/sign-in bzw. /partners/sign-in mit ?callbackUrl=…
Nicht angemeldeter Seitenaufruf (kein /api-Pfad). Auf einer Mandanten-Subdomain zeigt der Link auf APP_URL, weil dort keine Anmeldeseite existiert.
email-not-verifiedFür Betriebsinhaber · 403{"error":"email_not_verified"} (HTTP 403) bzw. Weiterleitung auf /restaurant/verify-notice | /partners/verify-notice
Angemeldet, aber session.user.emailVerified === false. Erlaubt bleiben nur die Hinweisseite, /api/auth und oeffentliche Pfade.
unauthorized-seiteFür MitarbeiterKein Zugriff — Dein Konto hat keine Berechtigung für diesen Bereich. Häufigster Grund: Du bist mit einem anderen Konto angemeldet als dem, für das die Einladung ausgestellt wurde.
Rund 16 Stellen leiten mit redirect('/unauthorized') hierher, wenn ein angemeldetes Konto keinen Zugang zum Betrieb hat.
subscription-inactiveFür Gäste · 403{"error":"subscription_inactive"} (HTTP 403) — Gast sieht: Online-Reservierung derzeit nicht verfügbar. Bitte kontaktieren Sie das Restaurant direkt, um einen Tisch zu reservieren.
ent.features.reservations ist false — abgelaufene Testphase oder ein Plan ohne Reservierungen. Trial und Partner-Verwaltung gelten als aktiv.
cron-unauthorizedFür Entwickler · 401{"error":"Unauthorized"} (HTTP 401)
Der Authorization-Header war nicht exakt `Bearer <CRON_SECRET>`. Die Middleware laesst /api/cron bewusst durch, damit die Route selbst pruefen kann.
cron-secret-not-configuredFür Entwickler · 503{"error":"CRON_SECRET is not configured"} (HTTP 503)
Die Umgebungsvariable CRON_SECRET fehlt; ohne Geheimnis verweigert die Route den Dienst, statt offen zu antworten.
rate-limit-redis-url-invalidFür Entwickler[rate-limit] RATE_LIMIT_REDIS_URL ist keine https-REST-URL — es wird prozesslokal gebremst (nur Log)
Es wurde die rediss://-TCP-Adresse statt der Upstash-REST-URL eingetragen; Platzhalter aus .env.example gelten als nicht gesetzt (:181-189).
rate-limit-store-unreachableFür Entwickler[rate-limit] geteilter Speicher nicht erreichbar, prozesslokaler Rückfall (nur Log)
Upstash antwortete nicht binnen 1000 ms oder mit einem Fehler. Bewusste Entscheidung: der Ausfall laesst durch, statt zu sperren.
client-ip-unknownFür EntwicklerBremsschluessel enthaelt 'unknown' — alle Aufrufer teilen einen Eimer
Weder CF-Connecting-IP noch X-Real-IP noch X-Forwarded-For vorhanden (Betrieb ohne Proxy, lokale Entwicklung).
ww-access-deniedFür Mitarbeiter · 403Nicht angemeldet. / Keine Berechtigung. / Restaurant nicht gefunden.
assertRestaurantWriteAccess liefert unauthenticated | forbidden | not_found; die drei Gruende werden zu genau diesen drei Saetzen als Toast.
Website, Themes, Domains, Medien
Website, Themes, Domains, Medien · 143 Meldungen
cloudflare-konfiguration-unvollstaendigFür EntwicklerCloudflare-Konfiguration unvollstaendig: CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_ZONE_ID
Mindestens eine der drei Cloudflare-Umgebungsvariablen fehlt oder ist leer. Die Subdomain wird dann gar nicht erst angelegt.
cloudflare-env-nicht-gesetztFür EntwicklerCLOUDFLARE_API_TOKEN is not set
requireEnv() wirft, sobald eine Cloudflare-Variable im laufenden Aufruf fehlt.
cloudflare-10000-token-darf-zone-nichtFür Entwickler · 403Cloudflare API /zones/... failed: 10000: Authentication error — Der Token ist GUELTIG, darf aber diese Zone nicht. Ihm fehlt „Zone > DNS > Bearbeiten" fuer genau diese Zone, oder er gehoert zu einem anderen Cloudflare-Konto als die Zone.
/user/tokens/verify bestaetigt den Token, die Zone ist aber nicht abgedeckt oder liegt in einem anderen Konto.
cloudflare-10000-token-ungueltigFür Entwickler · 403... — Cloudflare erkennt den Token NICHT an: falsch kopiert, abgelaufen oder widerrufen. Im richtigen Konto neu erzeugen (Zone > DNS > Bearbeiten und Zone > Zone > Lesen).
Der Token ist ungueltig, abgelaufen oder widerrufen.
cloudflare-10000-gegenpruefung-unerreichbarFür Entwickler... — Der Token wird abgelehnt; die Gegenpruefung bei Cloudflare war selbst nicht erreichbar.
Cloudflare lehnt ab, und /user/tokens/verify war nicht erreichbar — die Ursache bleibt offen.
cloudflare-zone-nicht-gefundenFür EntwicklerCloudflare zone "tactictable.com" not found
CLOUDFLARE_ZONE_ID enthaelt einen Zonennamen, den das Konto nicht kennt.
subdomain-geschuetzter-hostnameFür EntwicklerAbbau von "tactictable.com" verweigert — geschuetzter Hostname.
Es wurde versucht, den DNS-Eintrag der Apex-Domain oder von www abzubauen.
subdomain-vercel-token-fehltFür EntwicklerVercel: VERCEL_TOKEN fehlt — Domain nicht am Projekt registriert
Ohne VERCEL_TOKEN entfaellt Schritt 2; der CNAME steht, Vercel kennt den Host aber nicht.
subdomain-einrichtung-unvollstaendigFür BetriebsinhaberEinrichtung unvollständig.
provisionRestaurantSubdomain lieferte provisioned=false; der Grund steht im Feld error der Antwort.
subdomain-einrichtung-fehlgeschlagenFür BetriebsinhaberEinrichtung fehlgeschlagen
Der Aufruf der Subdomain-Route brach ab (Netzwerk oder 500).
subdomain-adresse-doppelt-p2002Für Entwickler[subdomain] Adresse ist einer anderen Zeile zugeordnet: <host>
Prisma P2002: die Spalte subdomain traegt den Wert schon bei einem anderen Betrieb.
cf-zonen-api-token-fehltFür EntwicklerCLOUDFLARE_API_TOKEN fehlt.
Zonenverwaltung fuer gekaufte Domains ist ohne Token nicht moeglich.
cf-zonen-account-id-fehltFür EntwicklerCLOUDFLARE_ACCOUNT_ID fehlt.
Ohne Konto-ID kann keine Zone gesucht oder angelegt werden.
cloudflare-nicht-erreichbarFür EntwicklerCloudflare /zones nicht erreichbar: <Grund>
fetch scheiterte oder das 20-Sekunden-Zeitlimit griff.
cloudflare-9109-token-auf-zone-beschraenktFür Entwickler · 403Cloudflare /zones fehlgeschlagen: 9109: ... — Das Cloudflare-Token ist auf eine BESTIMMTE Zone eingeschränkt. Für neue Zonen braucht es „Zone : Zone : Edit" UND „Zone : DNS : Edit" jeweils auf „Alle Zonen eines Kontos".
Die Token-Berechtigung haengt an einer festen Zone-ID; neu angelegte Zonen sind nicht abgedeckt.
cloudflare-1049-domain-noch-nicht-aufloesbarFür EntwicklerCloudflare /zones fehlgeschlagen: 1049: ... is not a registered domain
Die gerade gekaufte Domain hat noch keine gueltigen NS-/SOA-Einträge; die Registry braucht Minuten bis Stunden.
cloudflare-1105-zu-viele-versucheFür EntwicklerCloudflare /zones fehlgeschlagen: 1105: ...
Zu viele Zonen-Anlageversuche fuer dieselbe Domain; Cloudflare sperrt sie drei Stunden.
vercel-api-fehlerFür EntwicklerVercel API error: <status> <Rohtext>
Vercel antwortete nicht mit 2xx — meist fehlender/ungueltiger Token, falsches Projekt oder Team.
vercel-token-fehlt-externe-domainFür EntwicklerVERCEL_TOKEN fehlt — Domain kann nicht registriert werden.
Ohne Token antwortet Vercel mit nacktem 403; das ist ein Konfigurationsfehler auf unserer Seite.
domain-bei-anderem-vercel-projektFür BetriebsinhaberDiese Domain ist bereits bei einem anderen Vercel-Projekt registriert. Sie muss dort zuerst entfernt werden.
Vercel meldet domain_already_in_use/conflict — die Domain haengt an einem fremden Projekt oder Konto.
vercel-token-fehlt-trennenFür EntwicklerVERCEL_TOKEN fehlt.
Ohne Token kann die Domain nicht vom Projekt genommen werden.
vercel-token-fehlt-zertifikatFür EntwicklerVERCEL_TOKEN fehlt.
Zertifikatsstand und Ausstellungs-Anstoss brauchen den Vercel-Token.
vercel-certs-abfrage-fehlerFür EntwicklerVercel API 403
GET /v8/certs antwortete nicht mit 2xx; der Zertifikatsstand bleibt „weiss ich nicht".
github-theme-repo-anlegen-fehlgeschlagenFür EntwicklerGitHub theme repository creation failed: <Grund>
POST /user/repos scheiterte — fehlender GITHUB_TOKEN, fehlende Rechte oder Namenskonflikt.
vercel-domain-konfiguration-fehlgeschlagenFür EntwicklerDomain configuration failed: <Grund> / Domain creation failed: <Grund>
addRestaurantDomain lieferte success=false, die Subdomain haengt nicht am Vercel-Projekt.
domain-ungueltigFür Betriebsinhaber · 400Ungültige Domain.
Die Eingabe erfuellt fqdnSchema nicht (Tippfehler, Leerzeichen, fehlende Endung).
tactictable-adresse-nicht-erlaubtFür Betriebsinhaber · 400Das ist eine TacticTable-Adresse. Trage hier die Domain ein, die dir gehört — deine TacticTable-Adresse steht oben auf der Seite.
Es wurde tactictable.com oder eine Subdomain davon als eigene Domain eingetragen.
domain-bereits-anderem-betriebFür Betriebsinhaber · 409Diese Domain ist bereits mit einem anderen Betrieb verbunden.
Die Domain-Zeile traegt eine andere restaurantId; die Eindeutigkeit liegt auf dem Namen.
domain-nicht-gefundenFür Betriebsinhaber · 404Domain nicht gefunden.
Es wurde der Stand einer Domain abgefragt, die diesem Betrieb nicht gehoert.
domain-verbinden-fehlgeschlagenFür BetriebsinhaberDomain konnte nicht verbunden werden.
Die POST-Antwort war kein 2xx oder der Aufruf brach ab.
domain-nicht-registriertFür BetriebsinhaberDie Domain konnte nicht registriert werden. <Grund>
Vercel hat die Domain nicht angenommen (vercelRegistriert=false).
dns-noch-nicht-sichtbarFür BetriebsinhaberNoch nicht sichtbar. DNS-Änderungen brauchen oft einige Minuten.
Vercel meldet die Domain noch als nicht verifiziert bzw. misconfigured.
domain-stand-nicht-abfragbarFür BetriebsinhaberDer Stand dieser Domain konnte nicht abgefragt werden. Prüfe die Lade später erneut.
Die Statusabfrage lieferte keinen Stand (Fehler oder 404).
domain-trennen-fehlgeschlagenFür BetriebsinhaberDomain konnte nicht getrennt werden.
DELETE auf die externe Domain schlug fehl.
cloudflare-proxy-muss-grau-seinFür BetriebsinhaberLiegt deine Domain bei Cloudflare: die Wolke muss grau sein (Proxy aus). Hinter dem orangefarbenen Proxy kann das Zertifikat nicht ausgestellt werden, und die Seite bleibt unerreichbar.
Hinter dem Cloudflare-Proxy scheitert Vercels Zertifikatspruefung; die Domain bleibt „Invalid Configuration".
zertifikat-wird-ausgestelltFür BetriebsinhaberZertifikat wird ausgestellt — Die Einträge stimmen. Bis das Zertifikat da ist, dauert es in der Regel weniger als eine Minute; bis dahin kann der Browser noch warnen.
DNS stimmt, Vercel hat das Zertifikat noch nicht ausgestellt.
zertifikat-fehlt-dns-offenFür BetriebsinhaberDas Zertifikat kommt automatisch, sobald die DNS-Einträge stehen. Vorher lässt es sich nicht ausstellen — es wird über genau diese Einträge geprüft.
Die DNS-Einträge stimmen noch nicht, daher ist kein Zertifikat moeglich.
ssl-fehler-badgeFür BetriebsinhaberSSL-Fehler
Domain.sslStatus steht auf FAILED oder EXPIRED.
zertifikat-anstoss-fehlgeschlagenFür Entwickler[ssl] Anstoss für <domain> fehlgeschlagen: <Grund>
POST /v8/certs bei Vercel scheiterte; der Versuch wird trotzdem vermerkt.
dns-wurzel-kein-cnameFür BetriebsinhaberAn der Wurzel einer Domain erlaubt das DNS keinen CNAME — dort muss ein A-Eintrag stehen.
Hinweistext zum verlangten A-Eintrag auf 76.76.21.21 fuer die Wurzeldomain.
dns-www-fehltFür BetriebsinhaberDamit `www.` auf dieselbe Seite zeigt. Ohne diesen Eintrag läuft nur die Adresse ohne `www` ins Ziel.
Der CNAME fuer www fehlt beim Anbieter.
host-guide-domain-ungueltigFür Entwickler · 400Ungültige Domain.
Der Query-Parameter domain bzw. anbieter erfuellt das Schema nicht.
host-guide-anbieter-unbekanntFür Betriebsinhaber(leere Nameserver, erkannt = null — Auswahlliste statt Erkennung)
Die Domain gehoert dem Betrieb nicht oder die NS-Abfrage lieferte nichts; die Erkennung schweigt.
host-guide-ki-fehlversuchFür Betriebsinhaber[domain-guide] Fehlversuch nicht vermerkt: <Grund>
KI-Analyse des unbekannten Anbieters scheiterte (Guthaben, Modellfehler, kaputtes JSON).
stripe-nicht-konfiguriertFür Entwickler · 503Stripe ist auf dieser Umgebung nicht konfiguriert.
isStripeConfigured() ist false — Domainkauf/Broker-Anfrage ist ohne Stripe nicht moeglich.
domain-warenkorb-leerFür Betriebsinhaber · 400Der Domain-Warenkorb ist leer.
Checkout wurde ohne Positionen ausgeloest.
domain-warenkorb-waehrungen-gemischtFür Betriebsinhaber · 400Alle Domains im Warenkorb müssen die gleiche Währung haben.
Positionen tragen unterschiedliche currency-Werte; Stripe braucht eine Waehrung je Sitzung.
unsupported-tldFür Betriebsinhaber · 400unsupported_tld
Die gesuchte Endung steht nicht in DEFAULT_TLDS.
dns-eintrag-gesperrt-lebenswichtigFür BetriebsinhaberDieser Eintrag ist die Adresse von <zone> selbst. Ohne ihn ist die Website unter dieser Domain nicht mehr erreichbar — sofort und für alle Besucher. Deshalb lässt er sich nicht löschen.
Loeschen des Wurzel-Adresseintrags wuerde die Domain vom Netz nehmen.
dns-eintrag-gesperrt-nameserverFür BetriebsinhaberDas sind die Nameserver der Zone. Werden sie entfernt, antwortet für diese Domain niemand mehr — auch nicht für E-Mail.
NS-Einträge an der Wurzel sind gegen Loeschen gesperrt.
dns-eintrag-warnung-wwwFür BetriebsinhaberOhne diesen Eintrag ist www.<zone> nicht mehr erreichbar. Die Adresse ohne „www" funktioniert weiter.
Warnung vor dem Loeschen des www-Adresseintrags.
dns-aenderung-gesperrt-typFür BetriebsinhaberEin <TYP>-Eintrag an der Wurzel von <zone> ersetzt die Adresse der Domain nicht — die Website wäre danach nicht erreichbar. Das ist ein Löschen mit Umweg und deshalb gesperrt.
Der Typ eines Wurzel-Adresseintrags sollte auf einen Nicht-Adresstyp geaendert werden.
dns-aenderung-gesperrt-umbenennenFür BetriebsinhaberWird dieser Eintrag von <zone> weg umbenannt, hat die Wurzel der Domain keine Adresse mehr und die Website ist nicht erreichbar. Lege stattdessen einen zweiten Eintrag an.
Umbenennen des Wurzeleintrags entspricht seinem Loeschen.
dns-aenderung-warnung-fremdes-zielFür BetriebsinhaberDanach zeigt <zone> nicht mehr auf die bei TacticTable gehostete Website, sondern auf <ziel>.
Das Ziel des Wurzeleintrags wird von unserem erwarteten Ziel weg gestellt.
dns-anlage-warnung-cname-wurzelFür BetriebsinhaberAn der Wurzel einer Domain erlaubt das DNS keinen CNAME — dort stehen schon NS- und SOA-Einträge, und ein CNAME duldet keine Geschwister. Nimm einen A-Eintrag.
Ein CNAME an der Zonenwurzel widerspricht RFC 1034; Cloudflare weist ihn ab.
website-nicht-erreichbarFür BetriebsinhaberWebsite nicht erreichbar: <url>
Die Startseite lieferte kein HTML — Adresse falsch, Seite offline, oder der Abruf wurde blockiert.
import-url-schema-nicht-unterstuetztFür Betriebsinhaber · 400Nur http- und https-Adressen werden unterstützt.
Die Eingabe traegt ein fremdes Schema (ftp:, mailto:, javascript:).
import-url-ungueltigFür BetriebsinhaberBitte eine gültige Web-Adresse eingeben.
Die Eingabe laesst sich nicht als URL lesen.
ki-keine-json-antwortFür BetriebsinhaberKeine JSON-Antwort vom Modell
Das Modell antwortete ohne verwertbares JSON; die Auswertungsphase bricht ab.
ki-antwort-ungueltigFür BetriebsinhaberAI-Antwort ungültig: <Feldfehler>
Die Modellantwort verletzt das Zod-Schema der Extraktion.
design-analyse-abgelehntFür EntwicklerModell hat die Design-Analyse abgelehnt
stop_reason = refusal; die Gestaltungsanalyse faellt auf Heuristik zurueck (source: heuristic).
crawl-ergebnis-fehltFür BetriebsinhaberCrawl-Ergebnis fehlt — der Lauf kann nicht fortgesetzt werden.
contentJson ist leer oder unlesbar; ein fortgesetzter Lauf findet die gelesenen Seiten nicht.
auswertung-fehltFür BetriebsinhaberAuswertung fehlt — der Lauf kann nicht abgeschlossen werden.
extractedJson fehlt in der Persist-Phase.
persist-restaurant-nicht-gefundenFür EntwicklerRestaurant nicht gefunden
Die Restaurant-Zeile existiert beim Schreiben der Ergebnisse nicht mehr.
analyse-haengtFür BetriebsinhaberDie Analyse hängt beim Lesen der Seiten. Du kannst sie fortsetzen oder neu starten — deine Eingaben bleiben erhalten.
Seit ueber 5,5 Minuten kein Lebenszeichen; der Lauf ist fortsetzbar (Cron fehlt, Instanz abgeraeumt).
analyse-abgebrochenFür BetriebsinhaberDie Analyse wurde abgebrochen bei der Gestaltungsanalyse. Starte sie neu, oder überspringe sie und trage die Angaben selbst ein.
Ueber 30 Minuten Stille — der Lauf wird auf FAILED gesetzt.
analyse-fehlgeschlagenFür BetriebsinhaberAnalyse fehlgeschlagen.
Rueckfalltext, wenn der Import FAILED ist und kein eigener Fehlertext vorliegt.
import-kein-import-vorhandenFür Betriebsinhaber · 404Kein Import vorhanden.
Fortsetzen wurde aufgerufen, ohne dass je ein Import existierte.
import-bereits-fertigFür Betriebsinhaber · 409Die Analyse ist bereits fertig.
Der letzte Import steht auf COMPLETED.
import-laeuft-geradeFür Betriebsinhaber · 409Die Analyse läuft gerade. Bitte einen Moment warten.
beurteileLauf sagt „laeuft"; zwei Ausfuehrungen auf derselben Zeile sind gesperrt.
import-anderweitig-fortgesetztFür Betriebsinhaber · 409Die Analyse wurde gerade von anderer Stelle fortgesetzt.
Anspruch per updateMany verloren — ein zweiter Tab hat zuerst fortgesetzt.
import-validationFür Entwickler · 400validation (mit issues)
Der Rumpf erfuellt websiteImportStartSchema nicht.
import-interner-fehlerFür Entwickler · 500Interner Fehler
Unerwarteter Fehler in POST bzw. GET des Imports.
import-rate-limitFür Betriebsinhaber · 429(Rate-Limit-Antwort mit resetAt)
Mehr als 3 Import-Starts je Betrieb in 10 Minuten.
import-ki-guthaben-aufgebrauchtFür Betriebsinhaber · 402(KI-Guthaben-Antwort, Aufladen-Modal)
requireAiCredits schlug fehl — kein KI-Guthaben fuer die Analyse.
theme-ki-guthaben-aufgebrauchtFür BetriebsinhaberKI-Guthaben aufgebraucht — das Theme bleibt beim funktionierenden Basis-Design.
AiCreditsError waehrend der Theme-Generierung; Status wird auf fallback gesetzt.
theme-json-ungueltigFür BetriebsinhaberAntwort des Modells war kein gültiges Theme-JSON: <Feldfehler>
parseAiThemeOutput schlug fehl; der Lauf endet als fallback.
theme-rauchtest-gescheitertFür BetriebsinhaberKein generiertes Template hat den Render-Rauchtest bestanden
Alle erzeugten Templates scheiterten beim Probe-Rendern; das funktionierende Theme bleibt live.
theme-repo-provisionierung-gescheitertFür Entwickler[ai-theme] Repo-Provisionierung fehlgeschlagen: <Grund>
ensureThemeRepository scheiterte (GitHub-Token, Org-Rechte, Vorlage ohne Dateien).
theme-fallback-standard-designFür BetriebsinhaberWir konnten nicht alles übernehmen — das Theme wurde mit dem Standard-Design angelegt und ist trotzdem voll bearbeitbar.
aiGenerationStatus = fallback; Detailgrund steht darunter aus aiGenerationError.
theme-generierung-fehlgeschlagenFür BetriebsinhaberDie Theme-Generierung ist fehlgeschlagen. Dein bisheriges Theme ist unverändert live.
aiGenerationStatus = failed.
theme-aktivierung-fehlgeschlagenFür BetriebsinhaberAktivierung fehlgeschlagen
Der Aktivierungs-Aufruf antwortete nicht mit 2xx.
github-token-nicht-gesetztFür EntwicklerGITHUB_TOKEN ist nicht gesetzt
Theme-Dateien werden in GitHub gehalten; ohne Token geht kein Lesen und kein Commit.
github-org-nicht-gesetztFür EntwicklerGITHUB_ORG/GITHUB_OWNER ist nicht gesetzt
Ziel-Organisation fuer Theme-Repos fehlt.
theme-ohne-basetemplateFür EntwicklerTheme hat kein baseTemplate und kann nicht provisioniert werden
Die Theme-Zeile traegt kein baseTemplate; es gibt keine Vorlage zum Pushen.
basetemplate-ohne-dateienFür EntwicklerBase template "fine-dining" enthält keine Dateien unter theme-templates/
Der Vorlagenordner theme-templates/<name> ist leer oder fehlt im Deployment.
theme-nicht-gefundenFür BetriebsinhaberTheme nicht gefunden / Theme not found for this restaurant
Die themeId existiert nicht oder gehoert einem anderen Betrieb.
theme-datei-ist-verzeichnisFür EntwicklerDatei "<pfad>" ist ein Verzeichnis
Der angeforderte Pfad zeigt auf einen Ordner statt eine Datei.
aktives-theme-nicht-loeschbarFür Betriebsinhaber · 400Das aktive Theme kann nicht gelöscht werden. Aktiviere zuerst ein anderes Theme.
Das zu loeschende Theme ist live; sonst haette die Website keine Vorlage.
starter-theme-unbekanntFür Entwickler · 400Unknown starter template: <name>
Der uebergebene baseTemplate-Slug steht nicht in STARTER_THEMES.
starter-theme-nicht-verfuegbarFür Betriebsinhaber · 400Starter template "<name>" is not yet available.
Die Vorlage ist als available=false markiert.
template-nicht-im-themeFür EntwicklerTemplate "index" not found in theme
Das angeforderte Template fehlt im Theme (nach Import oder fehlerhaftem Commit).
asset-liquid-nicht-gefundenFür EntwicklerAsset liquid not found: theme.css.liquid
Die Liquid-Asset-Datei fehlt im Theme.
theme-kontext-restaurant-nicht-gefundenFür EntwicklerRestaurant not found: <id>
Beim Aufbau des Render-Kontexts fehlt die Restaurant-Zeile.
auth-secret-fehlt-vorschauFür EntwicklerAUTH_SECRET fehlt — Vorschau-Merkmal nicht erzeugbar.
Ohne AUTH_SECRET kann kein signiertes Vorschau-Token erzeugt werden.
theme-github-nicht-konfiguriertFür Entwickler · 500GitHub ist nicht konfiguriert
GITHUB_TOKEN fehlt; Repo-Liste und Import sind nicht moeglich.
theme-github-repos-nicht-ladbarFür Entwickler · 500GitHub-Repos konnten nicht geladen werden
Die GitHub-API antwortete mit Fehler (Rechte, Rate-Limit).
theme-github-owner-repo-fehltFür Entwickler · 400owner und repo sind erforderlich
Der Rumpf des Import-Aufrufs ist unvollstaendig.
theme-github-keine-dateienFür Betriebsinhaber · 400Keine Theme-Dateien im Repository gefunden
Der Branch enthaelt nur Binaerdateien, Punktdateien oder ist leer.
theme-github-import-fehlgeschlagenFür Entwickler · 500GitHub-Import fehlgeschlagen
Unerwarteter Fehler beim Import.
theme-zip-keine-dateiFür Betriebsinhaber · 400Keine Datei hochgeladen
Das Formular enthielt kein file-Feld.
theme-zip-zu-grossFür Betriebsinhaber · 400Datei ist zu groß (max. 50MB)
Das ZIP ueberschreitet 50 MB.
theme-zip-falscher-typFür Betriebsinhaber · 400Nur .zip Dateien sind erlaubt
Die Datei ist kein ZIP-Archiv.
theme-zip-keine-gueltigen-dateienFür Betriebsinhaber · 400Keine gültigen Theme-Dateien in der ZIP gefunden
Im Archiv fanden sich nur Binaer-/Systemdateien oder eine falsche Ordnerstruktur.
theme-upload-fehlgeschlagenFür Entwickler · 500Theme-Upload fehlgeschlagen
Unerwarteter Fehler beim Entpacken oder Speichern.
themes-nicht-ladbarFür Betriebsinhaber · 500Themes konnten nicht geladen werden
Die Abfrage der Theme-Liste schlug fehl.
theme-id-fehltFür Entwickler · 400Theme ID fehlt
Aktion ohne themeId gesendet.
theme-unbekannte-aktionFür Entwickler · 400Unbekannte Aktion
Das Feld action traegt einen nicht unterstuetzten Wert.
theme-operation-fehlgeschlagenFür Entwickler · 500Theme-Operation fehlgeschlagen
Sammel-Rueckfall fuer alle Fehler der Theme-Aktionen.
theme-not-foundFür Betriebsinhaber · 404not_found
Theme existiert nicht oder gehoert einem anderen Betrieb.
theme-update-fehlgeschlagenFür Betriebsinhaber · 500Failed to update theme
Das Speichern der Theme-Metadaten schlug fehl.
theme-loeschen-fehlgeschlagenFür Betriebsinhaber · 500Failed to delete theme
Loeschen von Zeile, GitHub-Repo oder lokalen Dateien schlug fehl.
theme-datei-pfad-fehltFür Entwickler · 400Bitte geben Sie einen Dateipfad an oder verwenden Sie list=true
Der Aufruf nennt weder path noch list=true.
theme-datei-inhalt-fehltFür Entwickler · 400Dateipfad und Inhalt sind erforderlich
Speichern ohne filePath oder content.
theme-datei-speichern-fehlgeschlagenFür Betriebsinhaber · 500Theme-Datei konnte nicht gespeichert werden
Der Commit nach GitHub scheiterte (Token, Branch, Konflikt).
theme-uebersetzungen-nicht-ladbarFür Entwickler · 500Übersetzungen konnten nicht geladen werden
Die locales-Dateien liessen sich nicht lesen oder sind kein gueltiges JSON.
theme-sprache-erforderlichFür Entwickler · 400Sprache und Übersetzungen erforderlich / Sprache erforderlich
Der Aufruf nennt den Sprachcode (bzw. die Uebersetzungen) nicht.
theme-sprache-hinzufuegen-fehlgeschlagenFür Betriebsinhaber · 500Sprache konnte nicht hinzugefügt werden
Die neue locales-Datei liess sich nicht anlegen.
theme-screenshot-fehlgeschlagenFür Betriebsinhaber · 500Screenshot fehlgeschlagen
Die Vorschau-Aufnahme lieferte kein Bild.
theme-download-keine-emailFür Betriebsinhaber · 400Keine E-Mail-Adresse gefunden
Am Konto haengt keine E-Mail-Adresse, der Download wird per Mail verschickt.
theme-download-keine-dateienFür Betriebsinhaber · 404Keine Theme-Dateien gefunden
Weder GitHub noch Datenbank lieferten Theme-Dateien.
theme-download-email-fehlgeschlagenFür Betriebsinhaber · 500E-Mail-Versand fehlgeschlagen
Der Mailversand mit dem Archiv scheiterte.
theme-asset-not-foundFür Entwickler · 404Asset not found
Die Datei existiert weder als assetLiquid noch als assetStatic im Theme.
theme-asset-theme-not-foundFür Entwickler · 404Theme not found
Die themeId in der Asset-Adresse existiert nicht.
theme-install-invalid-jsonFür Entwickler · 400Invalid JSON body
Der Rumpf war kein gueltiges JSON.
theme-install-basetemplate-fehltFür Entwickler · 400baseTemplate is required
Installation ohne Vorlagen-Slug aufgerufen.
theme-ai-generate-internalFür Entwickler · 500internal
Unerwarteter Fehler beim Starten oder Abfragen der KI-Generierung.
theme-ai-generate-rate-limitFür Betriebsinhaber · 429(Rate-Limit-Antwort mit resetAt)
Mehr als 5 KI-Theme-Generierungen je Betrieb in 30 Minuten.
theme-ai-generate-guthabenFür Betriebsinhaber · 402(KI-Guthaben-Antwort, Aufladen-Modal)
requireAiCredits schlug fehl vor dem Start der Generierung.
upload-adresse-nicht-erlaubtFür BetriebsinhaberDiese Datei liegt nicht an einer erlaubten Upload-Adresse.
Die Datei-URL zeigt nicht auf den eigenen Auslieferungs-Host (R2_PUBLIC_BASE_URL) oder den Altbestand utfs.io / *.ufs.sh — Schutz gegen Abruf interner Adressen.
upload-datei-nicht-abrufbarFür BetriebsinhaberDatei nicht abrufbar (HTTP 404).
Der Upload-Speicher antwortete nicht mit 2xx; Umleitungen werden bewusst nicht gefolgt.
upload-datei-zu-grossFür BetriebsinhaberDatei ist grösser als 20 MB.
Die abgerufene Datei ueberschreitet MAX_DOWNLOAD_BYTES.
upload-url-schema-nicht-erlaubtFür EntwicklerSchema http: ist nicht erlaubt
Nur https ist zugelassen; ueber http kaeme der Inhalt im Klartext.
upload-url-mit-anmeldedatenFür EntwicklerAdresse mit Anmeldedaten ist nicht erlaubt
Adressen der Form https://nutzer:pass@host taeuschen den Hostvergleich.
upload-url-fremde-herkunftFür EntwicklerHerkunft <host> ist keine Upload-Adresse
Der Host steht nicht in der Zulassungsliste und nicht in UPLOAD_ALLOWED_HOSTS.
upload-url-keine-gueltige-adresseFür Entwicklerkeine gültige Adresse
Der Wert liess sich nicht als URL lesen.
upload-datei-muss-ueber-uploadFür Betriebsinhaber · 400Die Datei muss über den Upload dieser Anwendung hochgeladen werden.
Die im Import genannte Datei-URL liegt nicht an einer erlaubten Upload-Adresse.
upload-unauthorizedFür Mitarbeiterunauthorized
Der Upload wurde ohne angemeldete Sitzung ausgeloest. (Frueher src/app/api/uploadthing/core.ts:8 — der alte Anbieter ist ausgebaut, der Fall ist derselbe.)
upload-batch-fehlgeschlagenFür Betriebsinhaber[website-import] Stapel fehlgeschlagen: <Grund>
Ein Stapel von Bildern/Videos liess sich nicht in die Mediathek spiegeln; der Import laeuft weiter.
theme-override-nicht-anwendbarFür Entwickler[theme-loader] failed to apply override "<pfad>": <Grund>
Eine Theme-Datei aus GitHub ist kein gueltiges JSON; die Fassung von der Platte bleibt aktiv.
theme-github-override-nicht-ladbarFür Entwickler[theme-loader] GitHub override fetch failed, using disk only: <Grund>
Der GitHub-Abruf des Theme-Branches scheiterte; ausgeliefert wird die Vorlage von der Platte.
externe-domain-dns-nicht-gesetztFür Betriebsinhaber[externe-domain] DNS konnte nicht gesetzt werden: <Grund>
Die Zone liegt in unserem Cloudflare-Konto, das Setzen der Einträge scheiterte trotzdem.
cloudflare-zonensuche-fehlgeschlagenFür Entwickler[cloudflare] Zonensuche fehlgeschlagen: <Grund>
Ein auf eine Zone beschraenkter Token darf die fremde Zone nicht abfragen.