Org Chart

The organizational chart is curated by admins in the CMS: people are placed by hand, and whole departments can be dropped in as sections that list their members automatically. The endpoint returns the chart exactly as employees see it — one nested tree where each box is either a person or a department, with reports under children.

Deactivated, terminated or deleted people and unpublished or deleted departments are left out and their reports move up one level. A person's title is their job title from the user profile, falling back to their profession. Department boxes carry a members_count of active members (kiosk accounts excluded) who are not placed elsewhere in the chart — list the people themselves with GET /users?group_id=. Person boxes embed the same user object as the users endpoints, without roles.

A company that has not built a chart yet gets an empty data array with meta.is_published false.

Required scope: read:org_chart. The org chart feature must be enabled for the company, see feature-gated endpoints.

Endpoints

GET
/api/open/v1/org-chart

Get the organizational chart as a nested tree

Get the chart

curl "https://customer.monotree.com/api/open/v1/org-chart" \
  -H "Authorization: Bearer mono_your_token_here"

Response:

{
  "data": [
    {
      "id": 1,
      "type": "person",
      "title": "CEO",
      "custom_title": "CEO",
      "description": "Leads the company and chairs the management team.",
      "headcount": 12,
      "user": {
        "id": 11,
        "name": "John Doe",
        "first_name": "John",
        "last_name": "Doe",
        "title": "CEO",
        "email": "john@example.com",
        "type": "default",
        "avatar_url": "https://...",
        "is_manager": true,
        "groups": [ { "id": 41, "name": "Kitchen", "type": "department", "is_manager": true, "created_at": "2024-01-15T10:00:00+01:00" } ],
        "hired_at": "2020-03-01",
        "date_of_birth": null,
        "is_away": false,
        "last_active_on": "2026-08-27T07:40:00.000000Z",
        "registered_at": "2020-03-01T09:00:00+01:00",
        "created_at": "2020-02-20T09:00:00+01:00"
      },
      "department": null,
      "children": [
        {
          "id": 2,
          "type": "department",
          "title": "Kitchen",
          "custom_title": null,
          "description": null,
          "headcount": 12,
          "user": null,
          "department": { "id": 41, "name": "Kitchen", "members_count": 12 },
          "children": []
        }
      ]
    }
  ],
  "meta": { "is_published": true, "published_at": "2026-08-28T10:00:00+02:00" }
}
FieldNotes
typeperson or department.
titlePerson: the job title from the user profile, else their profession (the first in alphabetical order, never the App Managers group), else null. When the company uses the profession as the title, the profile title already holds it and there is no further fallback. Department: the group name.
custom_titleKept for older integrations: boxes no longer have a title of their own. On a person box it is the job title from the user profile (user.title), null otherwise.
descriptionA short explainer an admin wrote on a person's box, up to 500 characters, null if there is none. Each box has its own. Always null on department boxes.
headcountEveryone below the box — reports (and their reports) plus department members. A department's own members are included in its headcount. A person who has several boxes below is counted once.
userSet on person boxes: the same user object as the users endpoints, without roles and without is_editor on its groups — its groups carry the person's departments and professions.
departmentSet on department boxes: the group id, name and members_count.
childrenDirect reports, in the order set in the CMS.
meta.is_publishedWhether employees can see the chart in the app.
meta.published_atWhen the chart was published, null if it has not been.