Org Chart
The org chart provides a visual hierarchy of your engineering organization, showing team relationships, sizes, and managers.
Viewing the Org Chart
Section titled “Viewing the Org Chart”Navigate to Organization > Org Chart to see the tree visualization.
The org chart displays:
- Team nodes with name and member count
- Parent-child relationships as tree connections
- Manager for each team (if assigned)
- Total member count including all descendant teams
- Root teams at the top level (no parent)
How Managers Are Detected
Section titled “How Managers Are Detected”The org chart automatically identifies the team manager by looking for members with these roles (in priority order):
ownermanagerleadteam_lead
The first match is displayed as the team’s manager.
Reorganizing Teams
Section titled “Reorganizing Teams”Via the UI
Section titled “Via the UI”The org chart supports drag-and-drop reorganization (admin only):
- Click on a team node
- Drag it to a new parent team
- Confirm the change
Via the API
Section titled “Via the API”Bulk update team relationships:
curl -X PUT https://shoehorn.example.com/api/v1/admin/org-chart \ -H "Authorization: Bearer <token>" \ -H "Content-Type: application/json" \ -d '{ "updates": [ {"team_id": "<team-a-uuid>", "parent_team_id": "<new-parent-uuid>"}, {"team_id": "<team-b-uuid>", "parent_team_id": null} ] }'Setting parent_team_id to null promotes the team to a root-level team.
Constraints
Section titled “Constraints”- No circular references: A team cannot be its own ancestor. The system validates this with a recursive check before applying changes.
- Atomic updates: When bulk updating, all changes succeed or all fail.
- Soft updates: Changing a parent does not affect team members or owned entities.
Org Chart Data
Section titled “Org Chart Data”The org chart API returns all teams in a flat list with relationship data:
curl https://shoehorn.example.com/api/v1/organization/org-chart \ -H "Authorization: Bearer <token>"Each team in the response includes:
| Field | Description |
|---|---|
id | Team UUID |
name | Display name |
slug | URL slug |
parent_team_id | Parent team UUID (null for root) |
sub_team_ids | Array of child team UUIDs |
member_count | Direct members only |
total_member_count | Direct + all descendants |
manager_user_id | Primary manager UUID |
manager_role | Manager’s role (owner/manager/lead) |