Skip to content

Invitations

  • You are an admin or owner on the project.
  • SMTP is configured (see SMTP presets) - optional, but without it you must copy the invite URL manually.

Dashboard → SettingsMembershipsInvite.

Fill in:

  • Email - target user’s email.
  • Role - viewer / operator / admin / owner.

Submit. With SMTP, the user receives an email with a one-shot URL.

The dashboard shows the invite URL after submission. Copy and share it (Slack, email, carrier pigeon). Token is still one-shot and expires in 72 hours.

  • One-shot: on accept, invalidated.
  • Expires: 72 hours.
  • Bound to the target email: only that email can accept.
  • Stored hashed in Postgres; plaintext is shown to the admin once.

The invite URL points to /invite/{token}:

  1. If the user has no z4j account, they’re prompted to create one. Email is pre-filled.
  2. If the user has an account, they sign in, and the role is attached to their existing user.
  3. Either way, on success, they’re redirected to the project dashboard.

Before acceptance: Settings → Memberships → Pending invites → Revoke.

After acceptance: treat as membership change - demote or remove the member. Their session is invalidated immediately.

  • Max 20 invites per project per hour.
  • Max 5 invites to the same email per 24h.

See rate limits.

Every invite / accept / revoke writes an audit log entry.