Multi-Org Management
O.D.I.N. supports multiple organizations within a single installation. Each organization is a logical container for users, printers, models, and spools. Organizations are ideal for print farms serving multiple clients, educational institutions with multiple labs or classes, and businesses with distinct departments.
Organizations require an Enterprise license. Community, Pro, and Education licenses do not include multi-org support.
Groups vs. Organizations
O.D.I.N. has two overlapping concepts:
| Concept | Purpose | API |
|---|---|---|
| Groups | Logical groupings of users for approval routing and access scoping (v1.1.0) | GET/POST /api/groups |
| Organizations | Full resource containers with per-org settings, branding, and webhooks (v1.3.0) | GET/POST /api/orgs |
Under the hood, organizations are groups with is_org = 1. All groups can serve as approval routing targets. Only organizations have per-org settings (filament defaults, quiet hours, webhooks, branding).
Creating an Organization
- Go to Settings → Access → Organizations
- Click New Organization
- Enter a name and optional description
- The creating admin becomes the organization owner
Only admins can create, update, and delete organizations.
Assigning Resources
Resources scoped to an organization are only visible to members of that organization (plus admins). Three resource types support org scoping:
| Resource | How to Assign |
|---|---|
| Printers | Settings → Access → [Org] → Printers → Assign Printer |
| Models | Model Library — set org on model detail |
| Spools | Inventory → Spools — set org on spool |
A printer can be set as shared (shared = true) to make it visible across all organizations on the installation.
Assigning Users to an Organization
- Go to Settings → Access → Organizations → [Org Name] → Members
- Click Add Member and select a user
- The user is now a member of the organization and sees only org-scoped resources
A user can belong to only one organization at a time. Removing a user from an organization un-scopes them (they see all unscoped resources again).
Per-Organization Settings
Each organization has a settings_json field in the database. O.D.I.N. merges these with system defaults when displaying org-specific behavior.
| Key | Type | Description |
|---|---|---|
default_filament_type | string or null | Default filament type pre-selected when creating jobs for org printers |
default_filament_color | string or null | Default filament color (hex) for org jobs |
quiet_hours_enabled | boolean | Whether quiet hours are active for this org |
quiet_hours_start | string | Quiet period start time (24h format, e.g. "22:00") |
quiet_hours_end | string | Quiet period end time (e.g. "07:00") |
webhook_url | string or null | Per-org webhook URL (Fernet-encrypted at rest) |
webhook_type | string | "discord", "slack", or "generic" |
branding_app_name | string or null | Override app name for users in this org |
branding_logo_url | string or null | Override logo URL for users in this org |
Configure these under Settings → Access → [Org Name] → Settings.
Group Ownership and Job Approval Routing
Every group/organization can have an owner (a user designated as the primary contact). When a job is submitted that requires approval, the approval alert is routed to the owner of the submitter's group.
This allows multi-class setups where each class has a lab supervisor who receives approval requests from their students only.
Organizations map naturally to classes or lab sections. Create one org per class, assign the lab computers (printers) to that org, and add students as Viewer-role members. Each class sees only its printers and models. The lab supervisor is the org owner and receives all job approval alerts for that class.
See Users & Access Control for the job approval workflow.
See Also
- Users & Access Control — roles, groups, job approval workflow
- Alerts & Notifications — per-org quiet hours and webhook notifications
- Branding & Customization — per-org branding overrides