Invites — SanadiqCloud
Product version: 1.0.0+1 Last updated: 2026-10-02 Audience: Tenant Owners and users with
tenant:user:create
A. Access
- Side rail Team → hub tile Invites, or Team > Invites.
- Or Settings hub shortcut Invites & provisioning.
- 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 |
|---|---|---|
| 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.
- Complete the form.
- Tap Send invitation.
- 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_EXCEEDEDand the message offers Adjust seats. If the subscription is not active, it fails withTENANT_ENTITLEMENT_INACTIVEand offers Open billing.
C. Accept Flow (recipient)
- Recipient opens the email link →
/accept-invitation?token=…. - Page loads invitation metadata; email (and org name when present) are read-only.
- Recipient sets Password + Confirm password and taps Create account.
- 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