/portal/team has two distinct sections: Team members (who can log into the portal) and Field techs (the roster the AI receptionist and smart-slot use for scheduling). A person can be both - or just one. Most owners add a tech to the field-tech roster first, then invite them as a team member when they're ready for portal access.
The 5 invitation roles
| Owner | Full access - everything. Can't be removed unless another owner exists first. At least one owner is always required. |
| Dispatcher | Operational control: schedule, calls, leads, customers, quotes, invoices. No financial reports, no settings, no integrations. |
| Tech | Field worker: their own day-view (/portal/tech), time-tracker, status updates, lead replies. Can't see other techs' jobs or financial data. Built for the PWA on a tech's phone. |
| Billing | Financial-only: invoices, P&L, sales tax, aging, exports. No calls, no schedule edits, no marketing. Good for an outside bookkeeper. |
| Viewer | Read-only across most of the portal. No mutations. Good for an investor or accountant you want looking but not touching. |
Inviting a team member
- 1Click 'Invite teammate'
Top of /portal/team.
- 2Enter email + pick role
If unsure, dispatcher is the safest default - covers most day-to-day work without exposing financials.
- 3Send
Recipient gets an email with a one-click 'Join workspace' link that walks them through password setup.
Per-feature permission overrides
Beyond role defaults, you can grant or revoke specific permissions per member - for example, 'this dispatcher can also edit integrations' or 'this billing person can't export CSVs.' Click any team member to see and toggle their granular permissions. These override the role defaults without changing their role. Most shops run fine on defaults; overrides are for the edge cases.
On-call rotation
The on-call section (below the team-members list) controls who gets paged for urgent leads and emergency calls. When a caller triggers an urgent keyword (burst pipe, no heat, gas smell), Plyrium alerts whoever is currently on-call via SMS + push, not just the owner. Each member can set their own on-call window - great for rotating after-hours coverage across a team. If nobody is on-call, alerts default to the owner.
Field tech roster - what the form actually has
Adding a field tech is what makes smart-slot work. The more complete the profile, the better the AI can match the right tech to the right job. Here's what each field does:
| Name / Phone / Email | Contact basics. Email is required if you want to give the tech a portal login. |
| Address (structured) | Street address broken into Line 1, Line 2, City, State, and Postal code. Not a single text blob. The AI uses this as the tech's start-of-day origin for route optimization. |
| Location | Multi-location FK - assigns the tech to a specific shop location. Pick from the locations you've set up at /portal/settings/locations. Leave blank for single-location shops. |
| Service radius (miles) | How far this tech is willing to travel from their home address for jobs. Smart-slot scores slots lower when a tech would need to travel past their radius. |
| Services | Which services this tech performs - multi-select chips from your services catalog. Smart-slot only offers this tech for appointment types that match. |
| Skills | Multi-select from your skills_catalog (Operations → Skills & Certs). NOT free-form text. Smart-slot matches appointment required_skills against this list - a tech without the required skill won't be surfaced as a candidate for that job. |
| Daily capacity (hours) | Maximum working hours per day. Entered as hours (e.g. 8 for full-time). Stored internally as minutes. Smart-slot treats a tech as fully booked once their committed job minutes hit this cap. Leave blank for no cap. |
| Daily capacity (appointments) | Alternative cap - maximum appointments per day regardless of duration. Use this when most jobs are similar length and counting jobs is simpler than tracking hours. |
| Commission rate % | Default commission percentage for this tech. Drives the Workforce → Commissions tab - Plyrium credits this tech with (paid invoice total × this rate) for invoices linked to their completed appointments. |
| Default calendar email | If set, appointment confirmations push to this email address's Google or Microsoft calendar (separate from the company-wide calendar integration). Useful when each tech has their own Google account. |
| Active toggle | Inactive = soft delete. The tech disappears from smart-slot and the dispatcher view but their history stays intact. Use this instead of deleting when a tech leaves temporarily. |
Certifications section
Inside each tech's profile there's a Certifications section (powered by the same skills_catalog at Operations → Skills & Certs). Assign certifications from the catalog with real expiration dates. Plyrium will warn you 60/30/7 days before a cert lapses so you're not caught off-guard when a state inspector asks.
Skills (on the main profile) drive smart-slot slot scoring - does this tech have the skill a job requires? Certifications (in the certs section) are compliance/HR - does this tech have a valid EPA 608 or master plumber license? Both pull from the same catalog; different UX, different purpose.
If a tech's daily capacity is 0 or left blank, smart-slot treats them as having unlimited capacity. But if you enter 0 intentionally, the system reads it as 'zero hours available.' Enter a real number (8 for full-time, 4 for part-time) or leave blank for no cap.
We block deactivating an account if it would leave your workspace with zero owners. Promote someone else first, then remove the original owner.