Files changed: engine/.embcache.json engine/changelog.md engine/lint-report.md vault/.trash/2026-06-19.md vault/docs/hardware/environment.md vault/docs/hardware/ip-allocation.md vault/docs/matrix/archivist.md vault/docs/matrix/matrix_host.md vault/docs/matrix/mautrix_signal.md vault/docs/matrix/synapse.md vault/docs/matrix/synapse_retention_discovery.md vault/docs/navi/cc-rules.md vault/docs/navi/deployment.md vault/docs/navi/themes.md vault/docs/services/ots-setup.md vault/docs/services/services.md vault/docs/services/usenet.md vault/docs/software/authentik.md vault/docs/software/caddy.md vault/docs/software/central.md vault/docs/software/dns.md vault/docs/software/geo-tools.md vault/docs/software/navi.md vault/docs/software/recon.md vault/docs/software/searxng.md vault/glossary.md vault/notes/echo6-landing-page-data-export.md vault/notes/ia-download-queue.md vault/projects/advbbs-project.md vault/projects/argus.md vault/projects/deploy-livesync.md vault/projects/fleet-patch-audit.md vault/projects/fleet-platform-baseline.md vault/projects/matrix-synapse-deployment.md vault/projects/meshai-config-hot-apply.md vault/projects/meshai-region-routing-plan.md vault/projects/meshai.md vault/projects/meshcore-transport.md vault/projects/meshtastic-headscale-runbook.md vault/projects/mmud-project.md vault/projects/nominatim-v5-reimport.md vault/runbooks/add-peertube-channel.md vault/runbooks/authentik-access-groups.md vault/runbooks/authentik-create-invitation.md vault/runbooks/authentik-oidc-application.md vault/runbooks/authentik-upgrade.md vault/runbooks/central-deploy-cutover.md vault/runbooks/ct-runbook.md vault/runbooks/edge2-access-reference.md vault/runbooks/expose-service-contabo.md vault/runbooks/expose-service-edge2.md vault/runbooks/expose-service-home.md vault/runbooks/fleet-magicdns-resolved-migration.md vault/runbooks/headless-browser-page-verification.md vault/runbooks/headscale-oidc-boot-order.md vault/runbooks/headscale-onboard-node.md vault/runbooks/ia-cli-reference.md vault/runbooks/ia-download-mirror.md vault/runbooks/idahomesh-bridge-setup.md vault/runbooks/idahomesh-vpn-device-setup.md vault/runbooks/lxc-service-migration.md vault/runbooks/mailcow-create-mailbox.md vault/runbooks/meshai-prod-compose-override.md vault/runbooks/meshmonitor-password-reset.md vault/runbooks/meshtastic-sidecar-node.md vault/runbooks/meshtasticd-sim-nodes-runbook.md vault/runbooks/nordvpn-lxc.md vault/runbooks/peertube-remote-runner.md vault/runbooks/pg-backup.md vault/runbooks/pi-nas-omv-runbook.md vault/runbooks/pipeline-patterns.md vault/runbooks/proxmox-create-ubuntu-vm.md vault/runbooks/proxmox-onboard-node.md vault/runbooks/pymc-repeater-kiss-tnc-reenumeration.md vault/runbooks/recon-operations.md vault/runbooks/recon-service-integration.md vault/runbooks/syncthing-add-node.md vault/runbooks/toc-cortex-pve9.2-update.md vault/session-resume/SESSION-HANDOFF-meshai-test.md
6.3 KiB
| title | type | tags | aliases | related | updated | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Authentik: Create Invitation | runbook |
|
|
2026-07-13 |
Authentik: Create Invitation
Create user invitations via the authentik Admin UI. Supports two modes: email (automatic delivery) and link-sharing (manual delivery).
When to Use This
Any time a new user needs to be invited to Echo6 services. Invitations create a time-limited enrollment link that lets the invitee set up their own username and password.
Prerequisites
- authentik admin access at https://auth.echo6.co
- For email mode: SMTP must be configured and working (no-reply@echo6.co via Mailcow)
Mode 1: Invite via Email (Automatic)
The invitation email is sent automatically when the invitation is created with an email field in custom attributes.
Steps
- Log in to https://auth.echo6.co as admin
- Navigate to Directory → Invitations → Create
- Fill in:
| Field | Value |
|---|---|
| Name | Descriptive name (e.g., jane-smith-2026-02) |
| Flow | Invitation Enrollment |
| Single use | On (recommended) |
| Expires | Set appropriately (e.g., 7 days from now) |
- In Custom attributes (YAML format):
name: Jane Smith
email: jane@example.com
- Click Create
The expression policy (invitation-email-sender) detects the email field and calls ak_send_email() to deliver the enrollment link to the invitee. The email includes the invitation URL with the ?itoken= parameter.
What the Invitee Receives
- Email from
no-reply@echo6.cowith subject "You've been invited to join Echo6" - Contains a link to
https://auth.echo6.co/if/flow/invitation-enrollment/?itoken=<token> - The link takes them through the enrollment flow: accept invitation → set username/password → auto-login
Mode 2: Invite via Link (Manual)
For cases where you want to share the link yourself (Slack, Signal, in person, etc.), omit the email field.
Steps
- Log in to https://auth.echo6.co as admin
- Navigate to Directory → Invitations → Create
- Fill in:
| Field | Value |
|---|---|
| Name | Descriptive name (e.g., jane-smith-link) |
| Flow | Invitation Enrollment |
| Single use | On (recommended) |
| Expires | Set appropriately |
- Custom attributes — either leave empty
{}or include only the name:
name: Jane Smith
Do not include an email field — this prevents the automatic email from being sent.
- Click Create
- In the invitation list, expand the row to reveal the invitation link
- Copy and share the link manually
Custom Attributes Reference
| Field | Required | Purpose |
|---|---|---|
name |
No | Pre-fills the invitee's display name (if enrollment flow uses it) |
email |
No | Triggers automatic email delivery. Omit for link-sharing mode |
Only email affects system behavior. Any other fields are stored as metadata on the invitation.
Best Practices
Expiry
- Email invitations: 7 days is reasonable — gives time for the email to arrive and the user to act
- Link invitations: 24–48 hours if sharing in real-time; 7 days if async
- Never use no-expiry — orphaned invitations are a security risk
Single Use
- Always enable for individual invitations — prevents link reuse after the invitee enrolls
- Only disable if you're creating a batch enrollment link for a group (rare)
Naming Convention
Use firstname-lastname-YYYY-MM or purpose-YYYY-MM for easy identification:
jane-smith-2026-02jodie-media-access-2026-02batch-beta-testers-2026-03
After Enrollment
New users are created under the users/enrolled path. To grant them access to services:
- Navigate to Directory → Groups
- Add the user to the appropriate group(s):
| Group | Grants Access To |
|---|---|
| media-users | Jellyfin, Jellyseer, PeerTube |
| ai-users | Open WebUI |
| cloud-users | Immich, Nextcloud |
| communication-users | Mailcow, Matrix |
See the Access Groups runbook for detailed group management procedures.
Troubleshooting
Email not sent (email mode)
- Check custom attributes — the
emailfield must be present and correctly formatted - Check SMTP — verify Authentik can send email:
ssh edge2 'sudo pct exec 105 -- docker exec authentik-server ak test_email matt@echo6.co' - Check Mailcow authsource — if SMTP auth fails, the no-reply@echo6.co mailbox may have reverted to
generic-oidc. See Mailcow Create Mailbox runbook, Step 2 - Check Authentik logs:
ssh edge2 'sudo pct exec 105 -- docker compose -f /opt/authentik/docker-compose.yml logs server --since 5m 2>&1 | grep -i email'
"Invalid invite/invite not found" when clicking link
- The invitation has expired or was already used (single-use)
- The invitation was deleted
- The
?itoken=parameter is missing or malformed in the URL
User enrolled but can't access any apps
- The user needs to be added to at least one service group (see "After Enrollment" above)
- By default, enrolled users have no group memberships
Managing Existing Invitations
View All Invitations
Admin UI → Directory → Invitations — shows all active invitations with name, expiry, and usage status.
Delete an Invitation
Click the trash icon next to the invitation. This immediately invalidates the link — anyone who hasn't enrolled yet will see "Invalid invite."
Via API
# List all invitations
curl -s "https://auth.echo6.co/api/v3/stages/invitation/invitations/" \
-H "Authorization: Bearer $AUTHENTIK_API_TOKEN" | python3 -m json.tool
# Delete by PK
curl -s -X DELETE "https://auth.echo6.co/api/v3/stages/invitation/invitations/<PK>/" \
-H "Authorization: Bearer $AUTHENTIK_API_TOKEN"
Checklist
[ ] Invitation created with correct flow (Invitation Enrollment)
[ ] Single use enabled
[ ] Expiry set appropriately
[ ] Email mode: email field in custom attributes, delivery confirmed
[ ] Link mode: link copied and shared manually
[ ] After enrollment: user added to appropriate groups
Created: 2026-02-16