Documentation

The people model in SquadBear

Where a person's data lives once their employee record exists - profile, custom fields, teams and the org chart

A person's data lives on their employee record - profile, custom fields, contacts, team memberships, and the org chart. Creating that record is covered in Invite your team.

The profile

A profile has six tabs - Overview (contact and employment facts, manager, teams, country, holiday calendar, work schedule, and for admins emergency contacts plus custom-field values), Teams & projects, Leave (balances), Documents (their files), Processes (the runs about this person), Schedule (work model, working days, weekly hours, FTE, plus its history) - and, for admins, a seventh: Data & privacy, which holds the employment history alongside export and erase (see Data protection and GDPR).

Custom fields

Admins define the fields at Workspace settings → Workspace → Employee fields: text, number, date, select, or boolean, grouped into a Personal, Job, or Other section. A workspace can define up to 50; key and type are fixed once set, the label is not, and a field is deactivated rather than deleted so its stored values persist. Values are set by an admin from Edit profile and render on the Overview tab under "Additional details." An agent reads the definitions with list_field_defs and writes values with update_employee_fields.

Contacts and employment history

Emergency contacts are a dedicated, structured record - name, relation, phone, an optional email - capped at three per person, not a custom field. Employment history is a read-only timeline over the audit log (hire, invitation accepted, profile edits, field and contact changes, country changes, schedule changes), for admins on a plan that includes the audit log.

Teams and the org chart

A team's manager counts as a member - they show up in the member list and the count, labelled Manager on their row. Reassigning the manager adds the new one to membership and leaves the person stepping down in place; removing a sitting manager from membership is refused with a 409 until someone else has the team. Someone on several teams has one primary team, set from the member row's Make primary team, and that is the team the directory names. Team pages live at People → Teams, where every member row opens a profile; a viewer the profile gate refuses gets that person's directory card instead of an error. The manager-report tree is its own page at People → Org chart, and the same tree reaches an agent as get_org_chart.

Offboarding

Open the person from People → People and choose Offboard in the header. Confirming it cancels their future pending and approved leave (refunding the balance), hands approvals waiting on them to their manager or, failing that, an admin, cancels the runs their hire started, and moves their open process actions to the same fallback. Offboarding emits employee.offboarded, so a process built on that trigger starts on its own. An inactive person is not a legal assignee: actions a run routes to the subject resolve to an admin instead - see Processes for how runs work.

Worked example

Northlake is ordering hoodies for the next all-hands and wants to track sizes. Marta adds a field at Workspace settings → Workspace → Employee fields: key tshirt_size, type select, options S/M/L/XL, section "Other." It lands on every profile at once, blank until Marta sets each person's value from Edit profile.