Schnittstellen, API & Automationen › Kundenlinks: Angebot, Termin, Bericht (API)
Kundenlinks: Angebot, Termin, Bericht (API)
API-GruppeLive✓ Geprüft am Sat Sep 05 2026 02:00:00 GMT+0200 (Mitteleuropäische Sommerzeit)Die öffentlichen, login-freien Seiten, die ein Kunde über einen Mail-Link öffnet: sein Angebot ansehen und annehmen, einen Termin buchen oder verwalten, seinen Werkstattbericht ansehen. Kein Passwort — der Link selbst ist der Schlüssel und läuft ab.
Bild folgt
Ein Token im Link ersetzt hier das Passwort: Er bindet ausschließlich an das eine Angebot oder den einen Termin, für den er ausgestellt wurde — kein Zugriff auf irgendeine andere Ressource ist damit möglich, und Termin-Links bleiben 180 Tage gültig. Nimmt der Kunde ein Angebot an, wird zuerst das unterschriebene Einverständnis-Dokument erzeugt; erst danach wechselt der Auftragsstatus, und zwar nur, wenn er noch auf Kundenfreigabe wartet — schlägt das Dokument fehl, bleibt der Auftrag unverändert und derselbe Link funktioniert erneut. Ein unbekanntes, abgelaufenes oder bereits verbrauchtes Token liefert immer dieselbe neutrale Fehlermeldung, damit niemand daraus erraten kann, ob ein Auftrag überhaupt existiert. Termin-Verwaltung prüft freie Zeitfenster serverseitig gegen dieselbe Bühnen-Belegung wie der Admin-Kalender.
- Link meldet „ungültig oder abgelaufen" → das Token ist verbraucht, widerrufen oder zu alt; ein neuer Link muss vom Büro erneut verschickt werden.
- Angebot lässt sich nicht annehmen → der Auftrag ist nicht mehr im Status Kundenfreigabe, meist weil er bereits durch ein anderes angenommenes Angebot weitergelaufen ist.
- „Zu viele Anfragen" beim Öffnen des Links → das Rate-Limit für diese IP-Adresse ist erreicht, kurz warten und erneut versuchen.
- app/api/angebot/[token]
- app/api/termin/book
- app/api/termin/manage
- app/api/termin/availability
- lib/db/customer-tokens.ts
- lib/booking-token.ts
- MEM:kundenprotokoll-verlauf-2026-08-19.md
| aufrufer | Browser (Kundenlink, kein Login) |
|---|---|
| routen | 6 (angebot[token] 3 + termin 3) |
| auth | Token im Link statt Passwort (verifyCustomerToken bzw. verifyBookingToken), zusätzlich IP-Rate-Limit je Route; ein ungültiges Token liefert immer dieselbe neutrale Fehlermeldung, nie einen Hinweis auf den Grund |
Beleg: app/api/angebot/[token] (3 route.ts) — lib/db/customer-tokens.ts::verifyCustomerToken; MEM:kundenprotokoll-verlauf-2026-08-19.md — LIVE prod=7ed03cb4
Tiefer fragen
Kontext aus dem KFZ-Bozo-Handbuch
Knoten: api-kundenlink-buchung (API-Gruppe · Schnittstellen, API & Automationen · live · geprüft Sat Sep 05 2026 02:00:00 GMT+0200 (Mitteleuropäische Sommerzeit) @ 0f0406a1)
Kurz: Die öffentlichen, login-freien Seiten, die ein Kunde über einen Mail-Link öffnet: sein Angebot ansehen und annehmen, einen Termin buchen oder verwalten, seinen Werkstattbericht ansehen. Kein Passwort — der Link selbst ist der Schlüssel und läuft ab.
Lies zuerst (Lesebereich, nicht der ganze Baum):
app/api/angebot/[token]
app/api/termin/book
app/api/termin/manage
app/api/termin/availability
lib/db/customer-tokens.ts
lib/booking-token.ts
MEM:kundenprotokoll-verlauf-2026-08-19.md (Gedächtnisdatei außerhalb des Repos)
Hängt zusammen mit:
sec-kunden-token (lib/db/customer-tokens.ts) · app-kundenportal (app/angebot/[token]/page.tsx) · sec-kunden-token (lib/db/customer-tokens.ts) · data-auftrag (lib/db/jobs.ts)
Offene Fragen der Seite:
keine
Hausregel 2: Vault-Daten sind für diese Session unsichtbar; Quellpfade auf Vault-Code sind keine Freigabe.
Frage: {{DEINE FRAGE}}
Antworte nur mit Belegen: nenne Datei und Zeile für jede Aussage.
Wenn die Quellen die Frage nicht beantworten, sag das und nenne, was du zusätzlich lesen müsstest.
Weicht die Seite vom Code ab, schlage den Seiten-Patch vor (wiki/seiten/schnittstellen-automation/api-kundenlink-buchung.md).