forbidden_actionHTTP 403Dem Schlüssel fehlt die gesondert zu vergebende Handlung
Drei Handlungen sind gefährlicher als gewöhnliches Schreiben auf ihrem Modul und brauchen deshalb einen eigenen, ausdrücklich gesetzten Haken: `reservations.status` (ein gemeldeter No-Show zieht eine hinterlegte Gebühr ein und belastet das betriebsübergreifende Risikoprofil eines echten Menschen), `guests.personal` (gibt `isBlocked`, `blockReason`, `noShowCount` und `notes` frei) und `marketing.send` (sendet Marketing-Kampagnen und aktiviert Automatisierungen — echte Werbung an Gäste). Das Modulrecht allein reicht für keine davon.
Wiederholen?
Nein — unverändertes Wiederholen ergibt genau dieselbe Antwort. Die Anfrage muss sich ändern.
Woran es liegt
- Ein Statuswechsel einer Reservierung ohne `action:reservations.status`.
- Ein Zugriff auf die persönlichen Vermerke eines Gastes ohne `action:guests.personal`.
- Eine Kampagne senden oder eine Automatisierung aktivieren ohne `action:marketing.send`.
Was zu tun ist
`action` im Körper nennt die fehlende Handlung. Sie wird im Dashboard einzeln vergeben — „Alle auswählen" setzt sie absichtlich NICHT mit.
Zusätzliche Felder im Körper
Neben error, message, docs und requestId, die jede Fehlerantwort trägt:
actionmoduleopWo dieser Fehler entsteht
- POST /api/v1/reservations`internalNotes` ohne die Handlung `action:guests.personal`.
- POST /api/v1/reservations/{id}/statusDem Schlüssel fehlt `action:reservations.status`. Sie wird getrennt vom Schreibrecht vergeben.
- POST /api/v1/guests`notes`, `isBlocked` oder `blockReason` ohne die Handlung `action:guests.personal`.
- PATCH /api/v1/guests/{id}Persönliche Felder ohne `action:guests.personal`.
- GET /api/v1/guests/{id}/exportDem Schlüssel fehlt `action:guests.personal`. `guests:read` allein reicht nicht — die Auskunft enthält Notizen, Sperrgrund und No-Show-Zähler.
- POST /api/v1/guests/{id}/anonymizeDem Schlüssel fehlt `action:guests.personal`.
- PATCH /api/v1/marketing/lists/{id}Neue `conditions` an einer Liste, die eine geplante, laufende oder pausierte Kampagne bzw. eine aktive oder pausierte Zeitplan-Automatisierung nutzt, ohne `action:marketing.send` (`reason: "marketing-list-live"`, `usage` nennt sie).
- PATCH /api/v1/marketing/templates/{id}Inhalt einer Vorlage ändern, die eine Kampagne oder Automatisierung verwendet, ohne `action:marketing.send` (`reason: "marketing-template-live"`, `usage` nennt sie).
- POST /api/v1/marketing/campaigns/{id}/sendDem Schlüssel fehlt `action:marketing.send`.
- PATCH /api/v1/marketing/flows/{id}Neuer `reentryDays` an einer schon aktivierten Automatisierung ohne `action:marketing.send` (`reason: "marketing-flow-reentry-live"`).
- POST /api/v1/marketing/flows/{id}/activateDem Schlüssel fehlt `action:marketing.send`.