---
title: The people model in SquadBear
description: Where a person's data lives once their employee record exists - profile, custom fields, teams and the org chart
order: 2
---

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](/docs/getting-started/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](/docs/admin/privacy/)).

## 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](/docs/processes/overview/) 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.

> [!AGENT]
> Show me the custom fields defined on employee profiles, which of them are admin-only, and the values recorded on my own profile.

## Related

- [Invite your team](/docs/getting-started/invite-your-team/)
- [Processes](/docs/processes/overview/)
- [Data protection and GDPR](/docs/admin/privacy/)
