Skip to main content

Overview

Security webhook events notify your SIEM or security tooling when identity and access management (IAM) actions occur in Gu1: member lifecycle, role changes, sign-in/out, failed logins, admin password actions, and selected security settings. Configure them like any other webhook in Settings → Webhooks and subscribe only to the security.* events you need.

Payload Shape (All Security Events)

Every security webhook uses the standard envelope plus a normalized inner payload:

Available Events

Members (security.member.*)

context.teamType (e.g. production, sandbox) and context.teamRole apply to team events. For environment access, context.environment is "production" or "sandbox", with context.environmentOrganizationId and context.environmentOrganizationName. On security.member.environment_changed, use context.fromAccess / context.toAccess ("both" | "production" | "sandbox" | "none") and changes.environmentAccess. Channel webhooks fire on the parent organization context; context.channelOrganizationId identifies the channel.

Invitation lifecycle (security.member.invitedsecurity.member.created)

If you subscribe to both events, expect two separate deliveries in this order: Integrator expectations:
  • Do not expect security.member.created at the same time as security.member.invited. The invitee must accept first; delivery is typically seconds to minutes later.
  • On security.member.created, actor and affectedUser usually refer to the new member (same Gu1 user UUID). affectedUser.email is the invited address.
  • payload.description is normally "Member accepted organization invitation". In rare cases where secondary setup (paired sandbox access, granular roles, or team assignment) could not be fully applied in the same pass, the description may read "Member accepted organization invitation (environment sync incomplete)". The member still has access in the invitation organization context — treat the webhook as a successful member creation for SIEM and access-governance use cases.
  • If you receive invited but never created after the user confirms they joined Gu1, check that your endpoint returned HTTP 2xx when Gu1 delivered events around acceptance time, then contact Gu1 support with the approximate timestamp and organizationId.
  • Use payload.context.invitationId to correlate invited and created for the same invite (same UUID on both events when acceptance succeeds).
Invitation context fields (present on security.member.invited and security.member.created when applicable): Example security.member.invited payload:
Example security.member.created payload:
Related follow-up events (same member, separate webhooks when applicable): security.member.environment_granted, security.member.team_added, security.member.channel_granted, security.role.assigned.

Roles & RBAC (security.role.*, security.rbac.*)

Authentication (security.auth.*)

Security Settings

Limitations

The following are not covered by Gu1 security webhooks today:
  • End-user self-service password change in Clerk (IdP-only)
  • MFA / SSO configuration changes in Clerk
  • Machine-to-machine API key authentication (separate from user login)
  • Clerk dashboard session revocations that never touch Gu1 API
Admin-initiated password reset/generation is covered via security.member.password_*.