Esta página aún no está traducida al español — mostrando la versión en inglés.
Invitations
Accept or decline invitations to join another workspace.
If someone invited you to their ChatbotGen workspace, the invitation shows up at /app/invitations.
The page
-
: Pending Invitations - Subtitle: "You've been invited to join these accounts."
Each invitation card
┌───────────────────────────────────────────────┐
│ Acme Inc. │
│ Invited Apr 12, 2026 as Admin │
│ │
│ [ Accept ] [ Decline ] │
└───────────────────────────────────────────────┘
Per invitation:
-
Card title:
inv.account_name -
Card description: "Invited {date}" (
formatDate(inv.inserted_at)) + "as Admin" wheninv.roles?.adminis truthy, else "as Member" -
Accept button (primary) →
POST /app/invitations/{token}/accept -
Decline button (outline) →
POST /app/invitations/{token}/reject
Both actions use the invitation's token.
What Accept does
Verified from InvitationController.accept/2:
-
Success:
Accounts.accept_invitation(token, user)creates anaccount_userrecord, the controller flashes "Invitation accepted!", and redirects you to/app. -
Error: flashes "Could not accept invitation." and redirects back to
/app/invitations.
What Decline does
Verified from InvitationController.reject/2:
-
Success:
Accounts.reject_invitation(token)runs, the controller flashes "Invitation declined." and redirects to/app/invitations. -
Error: flashes "Invitation not found." and redirects to
/app/invitations.
Empty state
If there are no pending invitations, the page shows a dashed panel with:
No pending invitations.
How invitations are listed
The controller calls Accounts.list_pending_invitations_for_email(user.email) — invitations are matched by the email address they were sent to, which must equal your logged-in user's email.