Employees
This guide covers the Employees page and an individual employee’s full profile. Some sections (Contract Maker, default weekly schedule) only appear if your restaurant has that feature turned on - if you don’t see something described here, check with your account owner or see Restaurant & Branches.
Only Owners, Ops Managers, Managers, and Supervisors with access can manage employees; regular staff don’t see the Employees page at all.
The Employees list
Section titled “The Employees list”The Employees page shows your whole team with a quick stat bar at the top - team size (and how many are active), how many people have manager-level roles, how many have an hourly rate set (“Pay set”), and how many are “kiosk ready” (have a PIN code for clock-in).
Each row shows the employee’s name, role, branch, status badge (active / on leave / terminated), hourly rate (if set), and employee ID. Click Edit on a row to open their quick-edit panel, or click their name to open their full profile.
How to invite a new employee
Section titled “How to invite a new employee”- Click Invite Employee at the top of the Employees page.
- Enter their first name and last name (required - the form won’t submit without both).
- Optionally enter an email and phone number. If you do enter an email, it must look like a real address (
name@example.com); the server rejects anything else with “Enter a valid email address, or leave it blank.” - Choose their role (Owner, Ops Manager, Manager, Supervisor, or Employee), branch/location, and optionally a job role and contract category.
- Optionally set a start date.
- Click Invite Employee.
What happens next depends on whether you gave an email:
- With an email: the system creates their account, sends them an onboarding email with a self-service link so they can set their own password and fill in their personal details, address, and bank details (see Employee onboarding). You’ll also see the link on screen in case the email fails to send.
- Without an email: no email is sent. The system generates an internal login for them automatically - a slugified
firstname-lastname.restaurant-nameaddress at@employees.sessionpilot.internalwith a short random suffix so it stays unique even if two employees share a name - and a random password behind the scenes. Use this for staff who don’t have or don’t want to use a personal email for work - they can instead log in with their employee code and a password you reveal via Reset Password, or simply clock in at a kiosk using a PIN code you set later on their profile.
Every new employee gets a sequential employee code (e.g. EMP-0001, EMP-0002) automatically - the system checks for a free number rather than trusting a raw headcount, so a deleted or renamed profile earlier on can’t leave a gap that causes a collision later - and is placed on your restaurant’s default “Full-time” contract category (created automatically the first time it’s needed, with a 40-hour minimum weekly hours) unless you pick a different one.
If your plan has an employee limit, invites are blocked once you hit it, with a message in the form “You’re on the {plan} plan (up to {limit} employees). Contact support to upgrade.” The count only considers employees whose status isn’t Terminated, so removing someone frees up a slot.
Employees imported from Nmbrs
Section titled “Employees imported from Nmbrs”If your restaurant has connected Nmbrs and run an import, each imported person shows up on the Employees list looking a little different from a manually invited one:
- They’re created with an internal login (no real email address), the same as an invite sent without an email - you’ll need to use Reset Password or set a login email later if they should sign in with a personal address.
- They’re not assigned to a branch - Nmbrs doesn’t send branch/location data, so you have to set that yourself (via Edit or their full profile) before they can be scheduled or clock in.
- They land on the default Full-time contract category, regardless of what they’re actually set up as in Nmbrs.
- Only their full name comes from Nmbrs. Pay rate, kiosk PIN, job roles, bank details, and everything else described in this guide still needs to be filled in inside SessionPilot OPS.
- Behind the scenes each imported profile is linked to Nmbrs by its Nmbrs employee ID, so running the import again later updates that same person’s name instead of creating a duplicate.
See Integrations for how to connect Nmbrs and run an import in the first place.
Editing an employee (quick panel)
Section titled “Editing an employee (quick panel)”Clicking Edit on the list opens a smaller panel where you can change:
| Field | Notes |
|---|---|
| Role | Owner / Ops Manager / Manager / Supervisor / Employee |
| Branch/Location | Which branch they belong to |
| Employment status | Active / On leave / Terminated |
| Expected arrival time | Used for late-arrival tracking - must be a valid HH:MM time if set |
| Contract category | e.g. Full-time, Part-time - see Contract categories below |
| Start date | Employment start date |
From the same panel you can also:
- Generate Employee ID - only shown if the employee doesn’t already have one; once generated, the button disappears.
- Reset Password - see Resetting a password below.
- Set a login email - give an employee who currently logs in with an internal/employee-code login a real email address as an alternative sign-in. This is validated as a proper email address and rejected if another account already uses it.
- Email onboarding link / Resend onboarding link - (re)send the self-service link described below, and see their onboarding progress badge (e.g. “Personal info done”, “Complete”).
- Open their full profile for everything else (pay, schedule, documents, etc).
If the employee was previously terminated, a banner offers a one-click Reactivate to restore their status and login access. If lifting their login ban fails for some reason, the panel tells you explicitly rather than silently leaving them still locked out.
Contract categories and what they actually change
Section titled “Contract categories and what they actually change”Contract categories (Full-time, Part-time, or whatever names your restaurant sets up) are created and configured on the Restaurant page - see Contract categories for how an Owner/Ops Manager creates one and sets its Minimum weekly hours, Allow edit days, and Allow edit times toggles. The category you assign here (or on the employee’s full profile) is what puts those toggles into effect for this specific person:
- If Allow edit days is off, this employee can’t add or remove which days they’re available for when a new shift-planning period opens - they can only adjust the times within the days their default weekly schedule already has them working.
- If Allow edit times is off, they can’t change the start/end times either - their availability for the period is locked to exactly what their default schedule and any manager-entered availability say.
- With no category assigned (or a category with both toggles on), the employee has full freedom to edit their own availability each period.
In other words: the default weekly schedule sets the starting point every period, and the contract category controls how far the employee can move away from it themselves.
Resetting a password
Section titled “Resetting a password”Click Reset Password for an employee:
- If they have a real email address (not an internal placeholder), SessionPilot OPS sends them a password-reset email, the same as the “Forgot password” flow - they set their own new password.
- If they only have an internal login (no real email), a new random temporary password is generated and shown to you on screen so you can relay it to them directly.
Archiving / removing an employee
Section titled “Archiving / removing an employee”Click Edit, scroll to the bottom, and click Remove Employee, then confirm. This is a soft delete: their account is banned from logging in (for 100,000 hours, effectively indefinitely) and their status is set to Terminated, but their history (shifts, attendance, payroll, chat) is kept intact rather than being deleted outright - a hard delete isn’t even attempted, since other tables reference the profile without a cascade. You can undo this anytime via Reactivate. You can’t remove your own account.
Customizing the employee ID card
Section titled “Customizing the employee ID card”Click Customize Card at the top of the page to choose which fields (role, branch, phone, email, employee code) show on each employee’s ID-card summary at the top of their profile. These five toggles default to on and apply restaurant-wide, not per employee.
Employee onboarding (self-service)
Section titled “Employee onboarding (self-service)”When you invite someone with an email, or send/resend an onboarding link from their profile, they receive a link (/onboard/{token}) that walks them through a short setup flow themselves - so a manager doesn’t have to collect personal or bank details on their behalf:
- Set a password - must be at least 8 characters and include an uppercase letter, lowercase letter, number, and special character. A strength meter shows how strong it is.
- Personal details - full name, date of birth, nationality, national ID number (personnummer or BSN, depending on your country), home address, and emergency contact.
- Bank details - bank name, account holder name, and country-appropriate account details (IBAN/BIC for the Netherlands, or clearing + account number for Sweden).
A progress bar shows which step they’re on. Once all three are done, the link shows a “you’re all set” confirmation and can’t be used again. Managers can see the employee’s onboarding progress as a badge (e.g. “Personal info done”) on both the Employees list and the employee’s own profile, and can resend the link at any time if the employee lost it or didn’t finish - resending always issues a fresh token and resets their progress flag, so an old link that was already completed can’t block a redo.
Sending or resending a link also quietly syncs that email onto the employee’s login itself (not just their profile), so once they’ve been through onboarding they can sign in with the real address they confirmed - not only their employee code.
The employee profile
Section titled “The employee profile”Opening an employee’s name (from the list, or from Payroll/Salary) takes you to their full profile, organized into sections.
Personal details, address & emergency contact
Section titled “Personal details, address & emergency contact”Editable fields: date of birth, nationality, national ID number (personnummer/BSN), street address, postal code, city, and an emergency contact’s name, relationship, and phone number. These are normally filled in by the employee via onboarding, but a manager can fix a typo or fill something in on their behalf here too. The national ID is validated against your restaurant’s country - a Dutch restaurant expects a 9-digit BSN, a Swedish one a 10- or 12-digit personnummer - and a value that doesn’t parse is rejected rather than silently saved.
Bank details
Section titled “Bank details”Bank name and account holder name, plus country-specific fields: IBAN and BIC/SWIFT for Dutch restaurants, or clearing number, account number, and optional IBAN for Swedish ones.
Pay & Time Clock
Section titled “Pay & Time Clock”| Field | Purpose |
|---|---|
| Hourly rate | Used to estimate labour cost on Payroll & Salary pages. Must be a positive number if set. |
| Expected weekly hours | Compared against actual worked hours. Must be between 0 and 168 if set. |
| Kiosk PIN code | 4-8 digit code the employee enters on a kiosk/tablet to clock in and out. Click Generate for a random 4-digit code. Must be unique across the restaurant - trying to reuse another employee’s PIN is rejected with “That kiosk code is already taken by another employee. Pick a different one.” |
| Payroll category | Determines which taxes apply when preparing this employee’s salary - see Payroll categories & taxes below |
| Expected arrival time | Used to flag late clock-ins |
Note that Payroll category here is a different thing from the Contract category on the quick-edit panel: contract category governs scheduling/availability permissions, payroll category governs which tax lines show up on this employee’s finalized payslip.
Default weekly schedule
Section titled “Default weekly schedule”This sets an employee’s standard week. It doesn’t touch actual assigned shifts - instead, the moment a manager opens a new shift-planning period, SessionPilot OPS uses each employee’s default schedule to pre-fill their availability for that period automatically, so nobody starts from a blank slate. Whether the employee can then edit that pre-filled availability themselves depends on their contract category.
Each day of the week can now hold more than one working block - useful for a split shift (e.g. lunch service then dinner service with a gap in between):
- Tick the Working checkbox to turn that day on (it defaults to a single 9:00-17:00 block) or off.
- Adjust the start and end time for the block.
- Click + Add another block to give that day a second (or third, etc.) working block - for example 9:00-12:00 and 17:00-21:00 for a split shift. The button only appears once the day is marked Working.
- Each block beyond the first gets its own × remove button next to it. There’s no limit on how many blocks a day can have.
- Click Save.
A day with no blocks (Working unchecked) means the employee isn’t scheduled to work that day by default. Saving replaces the employee’s entire default schedule in one go (the server deletes all existing rows for that employee and re-inserts the new set) - it’s not possible to edit a single block in isolation, only through this form. Every block also needs an end time strictly after its start time, or the save is rejected with a message naming the day.
Contract (Contract Maker)
Section titled “Contract (Contract Maker)”If your restaurant has Contract Maker enabled, this section lets you generate an employment contract PDF - this is a separate feature from the contract category described above; it’s about generating the legal agreement document itself, not scheduling permissions:
- If your restaurant’s business info (name, phone, address, org/KVK number) isn’t complete yet, fill it in first - only the Owner can edit this, from a link inside this section.
- Choose an agreement type and click Set up contract to open the detail form for that agreement type, then fill in its fields (an “Assistance mode” toggle shows English hints alongside translated field labels/sections).
- Click Save details.
- Click Generate Contract to produce a versioned, downloadable PDF snapshot. Each regeneration adds a new version to the Contract history list below, and the previous version is marked superseded.
Generating a contract snapshots more than just the form fields: it also freezes the restaurant’s business info at that moment (including the employee’s branch name as the workplace) and the current Terms & Policies wording/style, inside the same version - so a later edit to business info or contract terms flags drift (see below) instead of silently rewriting an already-issued contract. Each version’s PDF is available at its own link, and the employee themselves can open their own contract’s PDF too, not just a manager.
If contract details or business info change after a contract was generated, a notice flags that the live details have drifted from the generated PDF, prompting you to regenerate.
Job roles
Section titled “Job roles”Shows the job role(s) currently assigned to this employee as removable tags. Use the dropdown and Assign button to add another job role from the ones your restaurant has set up (see Creating a job role); a role already assigned won’t appear in the list again.
Documents
Section titled “Documents”Upload files against a document type - Contract, Offer letter, Food safety certificate, Work permit, Passport, ID document, or Other - and view or delete them later. Each uploaded document is stored under a path scoped to your restaurant and this employee, and can be opened via a signed link that expires after one hour.
Sidebar: hours, availability & calendar
Section titled “Sidebar: hours, availability & calendar”The right-hand sidebar on an employee’s profile (visible to managers) shows:
- Hours worked this month, plus overtime and a live “on-site now” indicator if they’re currently clocked in.
- Availability submitted for the month, as a simple date + time-range list.
- A monthly calendar: each day shows a dot if the employee has a scheduled shift (blue) or actual attendance (green), and the current day pulses green while they’re clocked in. Hovering a day reveals a small arrow that jumps straight to that date in Shift Planning for their branch.
Clicking a day opens a 24-hour timeline for that date, with scheduled shift blocks on the left half and actual worked (attendance) blocks on the right half, so you can compare what was planned against what actually happened - including a “here since HH:MM” state for a shift still in progress, and an “until previous day” label for attendance that started before midnight. From here you can:
- Click + Add a shift (or the Add shift button below the calendar for a quick-add without opening a day first) to create a new shift with a date, start time, and end time - the employee must already be assigned to a branch, or this is rejected.
- Click an existing shift block to edit its start/end time or Remove shift (with a confirmation prompt) directly from the profile, without leaving to open Shift Planning.
Frequently asked questions
Section titled “Frequently asked questions”An employee’s default schedule doesn’t match what I set.
The default schedule only pre-fills availability at the moment a new shift-planning period opens - editing it afterward doesn’t retroactively change availability for a period that’s already open. Also check the employee’s contract category: if Allow edit days or Allow edit times is on, the employee may have adjusted their own availability away from the default in their /my-shifts view.
How do I remove a split shift block from the default schedule? On the employee’s profile, under Default weekly schedule, click the × button next to the block you want to remove. It only appears once that day has more than one block - if a day has only one block, remove it by unchecking that day’s Working checkbox instead.

