Invites — SanadiqCloud

Product version: 1.0.0+1 Last updated: 2026-10-02 Audience: Tenant Owners and users with tenant:user:create


A. Access

  1. Side rail Team → hub tile Invites, or Team > Invites.
  2. Or Settings hub shortcut Invites & provisioning.
  3. Path: /settings/invites.

Primary nav is Team; the Settings hub also links here for convenience.


B. Sending an Invitation

The page uses an inline form (not a dialog). Fill:

Field Required Notes
Email Yes Invite destination
First name Yes Stored on the invitation
Last name Yes Stored on the invitation
Access role Yes One role from the active roles list (AppSelectField). Sends role name + roleIds

There is no personal message field in the current UI.

  1. Complete the form.
  2. Tap Send invitation.
  3. On success, a snackbar confirms and the form resets. The invite appears in the list (typically Pending).

If no roles exist yet, the UI points you to Roles (/settings/users-roles) to create one first (Manage roles).

You can also open Invites from Members → Invite User.

Rules when sending

  • Sending an invitation is accepted by the server only from the organization owner (with tenant:user:create).
  • An email that already has a pending invitation to this organization cannot be invited again until that invitation is revoked or expires.
  • Invitations expire after 7 days.
  • Each pending invitation reserves a seat. If no seat is free, sending fails with HTTP 402 TENANT_SEAT_LIMIT_EXCEEDED and the message offers Adjust seats. If the subscription is not active, it fails with TENANT_ENTITLEMENT_INACTIVE and offers Open billing.

C. Accept Flow (recipient)

  1. Recipient opens the email link → /accept-invitation?token=….
  2. Page loads invitation metadata; email (and org name when present) are read-only.
  3. Recipient sets Password + Confirm password and taps Create account.
  4. Success dialog → Sign in, then use the organization.

Seat availability is checked again when the invitation is accepted.

This is a password-create accept page for the invite token. It is not a full register form (no separate first/last name entry on accept). If the invited email already has a SanadiqCloud account, accepting fails with An account with this email already exists. Please sign in instead.


D. Invite List and Statuses

Columns: Email, First name, Last name, Access role, Expires, Status, and row actions.

Filter chips: All / Pending / Accepted / Revoked / Expired.

For Pending invites:

Action Effect
Resend Sends a new invitation email with a new link (the previous link stops working) and restarts the 7-day expiry. After a resend, the button waits 60 seconds before the next resend. Requires tenant:user:create.
Revoke Confirm dialog; invite can no longer be accepted. Requires tenant:user:delete.

Accepted, revoked, and expired invitations cannot be resent — send a new invitation instead.

Actions are icon/button controls on the row (not a ⋮ overflow menu).

You can open Invites from the Team roadmap (roles → invites → members) as well.


E. Best Practices

  • Create at least one assignable role before inviting.
  • Double-check email spelling before send.
  • Prefer Revoke + new invite if the email was wrong.
  • Monitor Pending and Expired; resend pending invitations when needed, and send a new invitation for expired ones.
  • Revoke invitations you no longer need — pending invitations hold a seat.

Related: Members | Roles overview | Signing in