# Ereignistypen: Organisation, Konten, Abrechnung

Die abonnierbaren Ereignistypen aus Organisation, Speicher-Verbindungen, Zugang, Konten, Sitzungen, Abrechnung und Beitritt — zum Nachschlagen, wenn Sie einen Endpunkt anlegen oder eine Zustellung deuten.

> **Typ:** nachschlagen
> **Für wen:** Wer die Ereignisse eines Endpunkts wählt oder den Rumpf einer Zustellung liest.
> **Voraussetzung:** keine zum Lesen, zum Abonnieren ein Endpunkt unter **Einstellungen › Organisation › Webhooks**.

## So lesen Sie die Tabellen

- **Ereignistyp** ist die Zeichenkette, die Sie beim Endpunkt abonnieren. Sie kommt bei jeder Zustellung in der Kopfzeile `X-Event-Type` an. Statt einzelner Typen dürfen Sie auch einen ganzen Bereich abonnieren (`composition.*`) oder mit `*` alles. Mehr Formen gibt es nicht, und alles andere weist der Server ab, siehe [Den Ereigniskatalog über die API abrufen](/de/webhooks/fetch-event-catalog).
- **Nutzlast-Kern** nennt zwei bis vier der wichtigsten Felder, die im Rumpf der Zustellung stehen. Es ist ein Auszug. Die vollständige Form bestimmt der jeweilige Bereich, und sie kann weitere Felder tragen. Zeitpunkt, Ereigniskennung und Auslöser reisen nicht im Rumpf.
- **Wann es entsteht** ist ein Halbsatz zur Einordnung, keine Aussage über Häufigkeit.

Das Portal bietet unter **Abonnierte Ereignisse** genau die Typen dieser Seite und der Seite [Ereignistypen: Inhalte, Programme, Geräte, Apps](/de/webhooks/event-types-content-devices) zur Auswahl — dieselbe Liste, die `GET /v1/webhooks/event-types` liefert. Alles andere lässt sich nicht abonnieren, das Anlegen eines Endpunkts weist es ab. Welche Typen das sind, steht unter [Was nie ankommt](/de/webhooks/event-types-content-devices#was-nie-ankommt). Zugestellt wird nur, was im Kontext Ihrer Organisation entsteht.

## Die Ereignistypen

### Organisation

Lebenszyklus der Organisation, Marke, eigene Adresse und Unternehmens-Anmeldung. `tenancy.tenant.suspended` und `.deleted` sind die Auslöser, an denen weitere Bereiche nachziehen.

| Ereignistyp | Nutzlast-Kern | Wann es entsteht |
|---|---|---|
| `tenancy.tenant.created` | `tenantId`, `slug`, `displayName` | Eine Organisation wurde angelegt. |
| `tenancy.tenant.updated` | `tenantId`, `changedFields` | Stammdaten der Organisation wurden geändert. |
| `tenancy.tenant.suspended` | `tenantId`, `reason`, `suspendedById`, `deletionDueAt` | Die Organisation wurde gesperrt, und `deletionDueAt` nennt den Löschtermin. |
| `tenancy.tenant.reactivated` | `tenantId`, `reactivatedById` | Eine Sperre wurde aufgehoben. |
| `tenancy.tenant.frozen` | `tenantId`, `reason`, `frozenById` | Die Organisation wurde eingefroren. |
| `tenancy.tenant.unfrozen` | `tenantId`, `unfrozenById` | Das Einfrieren wurde aufgehoben. |
| `tenancy.tenant.deletion-warned` | `tenantId`, `deletesAt`, `daysLeft` | Warnung vor der Löschung, `daysLeft` nennt die Resttage. |
| `tenancy.tenant.deleted` | `tenantId`, `slug`, `deletedById` | Die Organisation wurde gelöscht. |
| `tenancy.branding.updated` | `tenantId`, `changedFields` | Marke (Logo, Farben) wurde geändert. |
| `tenancy.custom-domain.verified` | `tenantId`, `customDomain` | Eine eigene Portal-Adresse wurde bestätigt. |
| `tenancy.custom-domain.removed` | `tenantId`, `domain` | Eine eigene Portal-Adresse wurde entfernt. |
| `tenancy.sso.configured` | `tenantId`, `providerId`, `protocol`, `status` | Die Unternehmens-Anmeldung wurde eingerichtet oder geändert. |
| `tenancy.sso.disabled` | `tenantId`, `providerId`, `protocol` | Die Unternehmens-Anmeldung wurde abgeschaltet. |
| `tenancy.sso.domain-changed` | `tenantId`, `providerId`, `domain`, `status` | Die Domain der Unternehmens-Anmeldung wurde geändert. |
| `tenancy.sso.enforcement-changed` | `tenantId`, `providerId`, `enforce`, `breakGlassUserIds` | Der Anmeldezwang wurde ein- oder ausgeschaltet. |
| `tenancy.sso.break-glass-used` | `tenantId`, `providerId`, `userId`, `email` | Ein Notfallkonto hat sich an der Unternehmens-Anmeldung vorbei angemeldet. |

### Speicher-Verbindungen

Dauervollmachten auf fremde Speicher-Konten. `broken` beantwortet die Frage, seit wann keine neuen Dateien mehr kommen.

| Ereignistyp | Nutzlast-Kern | Wann es entsteht |
|---|---|---|
| `cloud-connections.connection.connected` | `connectionId`, `provider`, `accountLabel`, `repaired` | Ein Speicher-Konto wurde verbunden, und `repaired` unterscheidet Erstverbindung und Reparatur. |
| `cloud-connections.connection.disconnected` | `connectionId`, `provider`, `revocationAcknowledged` | Die Verbindung wurde getrennt. |
| `cloud-connections.connection.broken` | `connectionId`, `provider`, `reason` | Die Vollmacht trägt nicht mehr. Ab hier steht der Abgleich still. Kein Auslöser im Portal. |

### Zugang: Rollen und Freigaben

Rollen der Organisation und Freigaben auf einzelne Ressourcen.

| Ereignistyp | Nutzlast-Kern | Wann es entsteht |
|---|---|---|
| `access.role.created` | `roleId`, `tenantId`, `name`, `permissions` | Eine Rolle wurde angelegt. |
| `access.role.updated` | `roleId`, `changedFields`, `newPermissions`, `newVersion` | Rechte oder Name einer Rolle wurden geändert. |
| `access.role.deleted` | `roleId`, `tenantId`, `requesterId` | Eine Rolle wurde gelöscht. |
| `access.grant.created` | `grantId`, `userId`, `resourceType`, `resourceId` | Eine Freigabe auf eine einzelne Ressource wurde erteilt. |
| `access.grant.revoked` | `grantId`, `userId`, `resourceType`, `resourceId` | Eine Freigabe wurde entzogen. |
| `access.grant.expired` | `grantId`, `userId`, `resourceId`, `expiredAt` | Eine befristete Freigabe ist abgelaufen. |
| `access.permission-catalog.rebuilt` | `tenantId`, `trigger`, `entryCount` | Der Rechtekatalog der Organisation wurde neu aufgebaut, und `trigger` nennt den Anlass. |

### Konten, Schlüssel und Geräte-Identitäten

Benutzerkonten, API-Schlüssel, SCIM-Zugänge, Anwendungen mit delegiertem Zugang und die Identität von Geräten. Die Konten und Schlüssel des Betreibers gehören nicht dazu, sie sind nicht abonnierbar (siehe [Was nie ankommt](/de/webhooks/event-types-content-devices#was-nie-ankommt)).

| Ereignistyp | Nutzlast-Kern | Wann es entsteht |
|---|---|---|
| `identity.user.created` | `userId`, `tenantId`, `email`, `initialRoles` | Ein Benutzerkonto wurde angelegt. |
| `identity.user.updated` | `userId`, `changedFields`, `newValues` | Profildaten eines Kontos wurden geändert. |
| `identity.user.role.changed` | `userId`, `previousRoles`, `newRoles` | Die Rollen eines Kontos wurden geändert. |
| `identity.user.suspended` | `userId`, `reason`, `cascadeSource` | Ein Konto wurde gesperrt. |
| `identity.user.deleted` | `userId`, `deletedById`, `pseudonymizationJobId` | Ein Konto wurde gelöscht, und die Pseudonymisierung ist angestoßen. |
| `identity.user.pseudonymized` | `userId`, `pseudonymId`, `entriesReplaced` | Personenbezogene Einträge eines gelöschten Kontos wurden ersetzt. |
| `identity.user.mfa.enabled` | `userId`, `tenantId`, `enabledAt` | Der zweite Faktor wurde eingerichtet. |
| `identity.user.mfa.disabled` | `userId`, `tenantId`, `disabledAt` | Der zweite Faktor wurde entfernt. |
| `identity.user.mfa.recovery-codes.regenerated` | `userId`, `tenantId`, `regeneratedAt` | Neue Wiederherstellungscodes wurden erzeugt. |
| `identity.user.password-changed` | `userId`, `via`, `changedAt` | Das Passwort wurde geändert, `via` nennt den Weg. |
| `identity.api-key.minted` | `apiKeyId`, `name`, `keyPrefix`, `scope` | Ein API-Schlüssel wurde erstellt. |
| `identity.api-key.revoked` | `apiKeyId`, `revokedById`, `reason` | Ein API-Schlüssel wurde widerrufen. |
| `identity.scim-token.minted` | `scimTokenId`, `tenantId`, `tokenPrefix`, `createdById` | Ein SCIM-Zugang für das Personalverzeichnis der Organisation wurde ausgestellt. |
| `identity.scim-token.revoked` | `scimTokenId`, `tenantId`, `revokedById`, `reason` | Ein SCIM-Zugang wurde widerrufen. Der Abgleich aus dem Personalverzeichnis steht damit still. |
| `identity.oauth.client.registered` | `clientId`, `name`, `redirectUris`, `registeredIp` | Eine fremde Anwendung hat sich für den delegierten Zugang angemeldet. Zugriff bekommt sie erst nach einer Einwilligung. |
| `identity.oauth.client.blocked` | `clientId`, `name`, `blockedById`, `reason`, `revokedGrants` | Der Plattformbetrieb hat eine Anwendung gesperrt, `revokedGrants` zählt die damit erloschenen Zugänge. |
| `identity.oauth.client.unblocked` | `clientId`, `name`, `unblockedById` | Die Sperre einer Anwendung wurde aufgehoben. Die erloschenen Zugänge kommen dadurch nicht zurück. |
| `identity.oauth.grant.granted` | `clientId`, `clientName`, `tenantId`, `userId`, `scopes` | Ein Konto hat einer Anwendung Rechte übertragen, sie gelten nur für diese Organisation. |
| `identity.oauth.grant.denied` | `clientId`, `clientName`, `tenantId`, `userId`, `requestedScopes` | Ein Konto hat die Anfrage einer Anwendung abgelehnt, es entstand kein Zugang. |
| `identity.oauth.token.issued` | `tokenId`, `clientId`, `userId`, `scopes`, `rotated` | Eine Anwendung hat ein Zugriffs- und ein Erneuerungs-Token erhalten, nach einer Einwilligung oder als Erneuerung (`rotated`). |
| `identity.oauth.token.revoked` | `clientId`, `userId`, `revokedGrants`, `reason` | Zugänge einer Anwendung wurden ungültig gemacht, `reason` nennt den Anlass. |
| `identity.device.registered` | `deviceId`, `certFingerprint`, `hardwareInfo` | Ein Gerät hat sich erstmals bei der Plattform gemeldet. |
| `identity.device.cert.rotated` | `deviceId`, `oldFingerprint`, `newFingerprint` | Das Zertifikat eines Geräts wurde erneuert. |
| `identity.device.reconnected` | `deviceId`, `reconnectedById`, `previousHardwareSerial` | Ein Web-Display wurde auf einen anderen Browser übertragen. Es bleibt gekoppelt. |
| `identity.device.released` | `deviceId`, `previousTenantId`, `reason`, `wipeLevel` | Ein Gerät hat Ihre Organisation verlassen, und seine Displays sind entfernt. `reason` nennt den Grund (`reconnect`, `factory`, `removed`, `ops`, `tenant-deleted`), `wipeLevel` die Stufe, mit der es sich leert. |
| `identity.device.blocked` | `deviceId`, `previousTenantId`, `reason`, `blockedAt` | Ein Gerät wurde als verloren gemeldet oder vom Betreiber gesperrt. Es gehört keiner Organisation mehr und kann sich nicht anmelden, bis die Sperre aufgehoben ist. |
| `identity.device.reregistration-requested` | `deviceId`, `tenantId`, `deviceName`, `requestedAt` | Ein gekoppeltes Gerät hat sich mit einem neuen Schlüssel angemeldet, vermutlich wurde es neu aufgesetzt. Es wartet, bis jemand in der Geräteakte entscheidet. |
| `identity.device.reregistration-decided` | `deviceId`, `decision`, `decidedById`, `allowedUntil` | Über ein neu gemeldetes Gerät wurde entschieden. `decision` ist `keep` (Displays behalten), `reconnect` (neu koppeln) oder `block` (sperren). |
| `identity.renderer.minted` | `rendererSessionId`, `playerId`, `expiresAt` | Eine Wiedergabe-Sitzung eines Displays wurde ausgestellt (Maschinenverkehr). |
| `identity.renderer.revoked` | `rendererSessionId`, `playerId`, `reason` | Eine Wiedergabe-Sitzung wurde entzogen (Maschinenverkehr). |

### Sitzungen und Anmeldung

Anmeldungen, Verlängerung von Sitzungen, Einmal-Links und das Handeln des Plattformbetriebs im Namen eines Kontos. `sessions.session.theft-detected` ist der Alarm bei einem wiederverwendeten Sitzungs-Token.

| Ereignistyp | Nutzlast-Kern | Wann es entsteht |
|---|---|---|
| `sessions.login.succeeded` | `sessionId`, `userId`, `kind`, `method` | Eine Anmeldung ist gelungen, `method` nennt den Weg. |
| `sessions.login.failed` | `email`, `reason`, `ipAddress` | Eine Anmeldung ist gescheitert. |
| `sessions.mfa.verified` | `sessionId`, `userId`, `via` | Der zweite Faktor wurde bestätigt. |
| `sessions.mfa.failed` | `sessionId`, `userId`, `attemptCount` | Der zweite Faktor wurde falsch eingegeben. |
| `sessions.session.refreshed` | `sessionId`, `familyId`, `userId` | Eine Sitzung wurde verlängert (Dauerverkehr). |
| `sessions.session.theft-detected` | `sessionId`, `familyId`, `replayedHashPrefix` | Ein bereits verbrauchtes Sitzungs-Token wurde erneut vorgelegt. |
| `sessions.session.terminated` | `sessionId`, `userId`, `reason` | Eine Sitzung wurde beendet. |
| `sessions.session.all-terminated` | `userId`, `revokedCount`, `keptSessionId` | Alle Sitzungen eines Kontos wurden beendet. |
| `sessions.password-reset.requested` | `passwordResetId`, `subjectKind`, `purpose` | Ein Passwort-Zurücksetzen wurde angefordert. |
| `sessions.password-reset.completed` | `passwordResetId`, `userId`, `subjectKind` | Ein Passwort wurde über das Zurücksetzen neu gesetzt. |
| `sessions.magic-link.requested` | `magicLinkId`, `email`, `expiresAt` | Ein Anmeldelink wurde angefordert. |
| `sessions.magic-link.consumed` | `magicLinkId`, `sessionId`, `userId` | Ein Anmeldelink wurde genutzt. |
| `sessions.impersonation.started` | `operatorUserId`, `targetUserId`, `reason`, `expiresAt` | Der Plattformbetrieb handelt im Namen eines Kontos. |
| `sessions.impersonation.ended` | `operatorUserId`, `targetUserId`, `endedBy` | Das Handeln im Namen eines Kontos wurde beendet. |

### Abrechnung

Vertrag, Rechnungen, Zahlungsmittel und die freigeschalteten Funktionen. Ein Paketwechsel meldet sich zweimal: `subscription.package-changed` sagt, dass der Vertrag auf einem anderen Paket steht (bei jedem Wechsel), und `feature-entitlements.changed` sagt, dass sich einer der Anzeige-Schalter bewegt hat, und nennt in `changedKeys`, welcher. Getrennte Ereignisse für Auf- und Abstieg gibt es nicht — die Richtung steht in `from` und `to`.

| Ereignistyp | Nutzlast-Kern | Wann es entsteht |
|---|---|---|
| `billing.subscription.created` | `subscriptionId`, `tenantId`, `status`, `billingCycle`, `currentPeriodEnd` | Ein Vertrag wurde angelegt. |
| `billing.subscription.activated` | `subscriptionId`, `tenantId`, `from` (`trial`/`past_due`) | Der Vertrag ist aktiv, `from` nennt den vorigen Zustand. |
| `billing.subscription.past-due` | `subscriptionId`, `graceUntil`, `reason` (`payment-failed`/`trial-ended`) | Zahlung ausgeblieben oder Testphase beendet. `graceUntil` nennt die Frist. |
| `billing.subscription.grace-lapsed` | `subscriptionId`, `tenantId`, `graceLapsedAt`, `suspendsAt` | Die Frist ist verstrichen, `suspendsAt` nennt die Sperre. |
| `billing.subscription.trial-ending` | `subscriptionId`, `tenantId`, `trialEndsAt`, `daysLeft` | Die Testphase endet bald, `daysLeft` nennt die Resttage. |
| `billing.subscription.suspended` | `subscriptionId`, `tenantId` | Der Vertrag wurde ausgesetzt. |
| `billing.subscription.canceled` | `subscriptionId`, `reason` | Der Vertrag wurde gekündigt. |
| `billing.subscription.package-changed` | `tenantId`, `from` (nullable), `to`, `at` | Der Vertrag steht auf einem anderen Paket. Es kommt bei jedem Wechsel, die Richtung steht in `from` und `to`. |
| `billing.subscription.period-rolled` | `subscriptionId`, `tenantId`, `periodStart`, `periodEnd`, `cameFromTrial` | Eine neue Abrechnungsperiode hat begonnen. |
| `billing.subscription.cancel-scheduled` | `subscriptionId`, `tenantId`, `effectiveAt`, `reason` | Eine Kündigung wurde zum Termin vorgemerkt. |
| `billing.subscription.cancel-revoked` | `subscriptionId`, `tenantId`, `at` | Eine vorgemerkte Kündigung wurde zurückgenommen. |
| `billing.subscription.trial-extended` | `subscriptionId`, `tenantId`, `days`, `trialEndsAt`, `reason` | Die Testphase wurde verlängert. |
| `billing.subscription.license-conflict` | `subscriptionId`, `tenantId`, `devices`, `licenses`, `deadline` | Die bezahlte Verringerung der gebuchten Displays ist wirksam, und es laufen mehr Geräte, als Displays gebucht sind. Die überzähligen laufen bis `deadline` weiter. |
| `billing.subscription.license-conflict-enforced` | `subscriptionId`, `tenantId`, `frozen`, `licenses` | Die Frist ist abgelaufen, `frozen` zählt die eingefrorenen Displays. Sie bleiben es, bis die Organisation Displays dazubucht oder ein Gerät abkoppelt. |
| `billing.subscription.pending-change-failed` | `subscriptionId`, `tenantId`, `kind` (`quantity`/`package`), `pendingQuantity`, `usedDisplays`, `effectiveAt` | Eine vorgemerkte Änderung ist nicht wirksam geworden, weil mehr Displays belegt sind, als sie vorsieht. Sie bleibt stehen und wirkt zum nächsten Periodenende. |
| `billing.invoice.issued` | `invoiceId`, `invoiceNumber`, `amountCents`, `currency` | Eine Rechnung wurde gestellt. |
| `billing.invoice.paid` | `invoiceId`, `invoiceNumber`, `amountCents`, `paidAt` | Eine Rechnung wurde bezahlt. |
| `billing.invoice.payment-failed` | `invoiceId`, `amountCents`, `attemptCount` | Eine Zahlung ist gescheitert. |
| `billing.invoice.refunded` | `invoiceId`, `reason`, `refundId` | Eine Rechnung wurde erstattet. |
| `billing.invoice.credited` | `invoiceId`, `creditNoteId`, `creditNoteNumber`, `amountCents`, `settlement`, `reason` | Zu einer Rechnung wurde eine Gutschrift erstellt. |
| `billing.invoice.voided` | `invoiceId`, `invoiceNumber`, `reason` | Eine Rechnung wurde storniert. |
| `billing.invoice.written-off` | `invoiceId`, `invoiceNumber`, `amountCents`, `reason` | Eine Rechnung wurde ausgebucht. |
| `billing.invoice.dunned` | `invoiceId`, `noticeId`, `noticeNumber`, `level`, `deadlineAt` | Eine Mahnung wurde erstellt, `level` nennt die Stufe. |
| `billing.vat-id.confirmed` | `tenantId`, `countryCode`, `requestId` | Die Umsatzsteuer-Identnummer wurde bestätigt. |
| `billing.vat-id.invalidated` | `tenantId`, `countryCode`, `previousStatus` | Die Umsatzsteuer-Identnummer gilt nicht mehr. |
| `billing.payment-method.attached` | `tenantId`, `stripePaymentMethodId`, `kind`, `lastFour` | Ein Zahlungsmittel wurde hinterlegt. |
| `billing.payment-method.removed` | `tenantId`, `stripePaymentMethodId` | Ein Zahlungsmittel wurde entfernt. |
| `billing.payment-way.switched` | `tenantId`, `before`, `after` (`invoice`/`stripe`) | Der Zahlweg wurde gewechselt (`invoice` oder `stripe`). |
| `billing.feature-entitlements.changed` | `tenantId`, `before`, `after`, `changedKeys` | Einer der Anzeige-Schalter für Funktionen hat sich bewegt, `changedKeys` nennt welche. |
| `billing.item-override.ending` | `tenantId`, `subscriptionId`, `skuCode`, `validUntilDate`, `effectiveUnitPriceCents`, `listUnitPriceCents` | Eine Sonderkondition läuft demnächst aus. |
| `billing.item-override.expired` | `tenantId`, `subscriptionId`, `skuCode`, `validUntilDate`, `listUnitPriceCents` | Eine Sonderkondition ist abgelaufen. |
| `billing.checkout.started` | `checkoutRef`, `tenantId`, `purpose`, `packageCode`, `billingCycle`, `entry` | Ein Kaufvorgang wurde begonnen. |
| `billing.checkout.finished` | `checkoutRef`, `tenantId`, `purpose`, `outcome`, `paymentWay` | Ein Kaufvorgang wurde beendet, `outcome` nennt den Ausgang. |

### Beitritt und Einrichtung

Einladungen, Einrichtungsassistent, Bereitstellung einer neuen Organisation, Beitrittsanfragen und Selbst-Registrierung.

| Ereignistyp | Nutzlast-Kern | Wann es entsteht |
|---|---|---|
| `onboarding.invitation.sent` | `invitationId`, `email`, `defaultRoleId`, `expiresAt` | Eine Einladung wurde verschickt. |
| `onboarding.invitation.resent` | `invitationId`, `email`, `expiresAt` | Eine Einladung wurde erneut verschickt. |
| `onboarding.invitation.revoked` | `invitationId`, `email`, `revokedById` | Eine Einladung wurde zurückgezogen. |
| `onboarding.invitation.accepted` | `invitationId`, `email`, `acceptedByUserId` | Eine Einladung wurde angenommen. |
| `onboarding.invitation.expired` | `invitationId`, `tenantId`, `email` | Eine Einladung ist abgelaufen. |
| `onboarding.setup-step.completed` | `tenantId`, `step`, `via` | Ein Schritt des Einrichtungsassistenten wurde abgeschlossen. |
| `onboarding.setup-wizard.completed` | `tenantId`, `completedAt` | Der Einrichtungsassistent wurde abgeschlossen. |
| `onboarding.tenant.provisioning-started` | `tenantId`, `slug`, `provisionedById` | Die Bereitstellung einer neuen Organisation hat begonnen. |
| `onboarding.tenant.provisioning-completed` | `tenantId`, `subscriptionId`, `ownerEmail` | Die Bereitstellung einer neuen Organisation ist abgeschlossen. |
| `onboarding.join-request.received` | `joinRequestId`, `tenantId`, `email`, `displayName` | Eine Beitrittsanfrage ist eingegangen. |
| `onboarding.join-request.decided` | `joinRequestId`, `tenantId`, `email`, `decision` (`accepted`/`rejected`), `decidedById` | Eine Beitrittsanfrage wurde entschieden (`accepted` oder `rejected`). |
| `onboarding.self-registration.changed` | `enabled`, `reason`, `changedById` | Der Plattform-Schalter der Selbst-Registrierung wurde umgelegt (Plattformbetrieb). |
| `onboarding.signup.started` | `funnelRef`, `entry` | Eine Selbst-Registrierung wurde begonnen. |
| `onboarding.signup.verified` | `funnelRef`, `route` (`create`/`join`/`sso`) | Die Adresse einer Selbst-Registrierung wurde bestätigt, `route` nennt den Weg. |
| `onboarding.signup.completed` | `funnelRef`, `tenantId` | Eine Selbst-Registrierung ist abgeschlossen. |
| `onboarding.terms.accepted` | `tenantId`, `userId`, `occasion`, `documents`, `locale`, `acceptedAt` | Vertragsdokumente wurden angenommen, `documents` nennt welche. |

## Weiterführendes

- [Ereignistypen: Inhalte, Programme, Geräte, Apps](/de/webhooks/event-types-content-devices)
- [Einen Webhook-Endpunkt anlegen](/de/webhooks/create-endpoint)
- [Was gesendet wird und wie wiederholt wird](/de/webhooks/delivery-and-retries)
