---
title: "get the whole known network of people (every person with at least one kinship edge or non-family tie, plus every one of those edges/ties), for the force-directed \"ontology\" explorer opened via the PeopleExplorer.open() modal (formerly the standalone page /PeopleGraph). Registered before the \"{id}\" route below (and constrained to int there) so this literal segment isn't swallowed as an id."
method: GET
path: "/api/people/graph"
tags: ["GanjoorRelatedPerson"]
---

# get the whole known network of people (every person with at least one kinship edge or non-family tie, plus every one of those edges/ties), for the force-directed "ontology" explorer opened via the PeopleExplorer.open() modal (formerly the standalone page /PeopleGraph). Registered before the "{id}" route below (and constrained to int there) so this literal segment isn't swallowed as an id.

`GET /api/people/graph`

## Request

- Base URL: `https://api.ganjoor.net` (the document declares no server; this is the origin it was published from)
- URL: `https://api.ganjoor.net/api/people/graph`
- Auth: none declared

## Response `200`

OK

- GanjoorPersonGraphViewModel: the whole known network of people - every GanjoorRelatedPerson that has at least one kinship edge or non-family tie, plus every one of those edges/ties - served by GET api/people/graph for the force-directed "ontology" explorer opened via the PeopleExplorer.open() modal (formerly the standalone page /PeopleGraph), the nowruzgan-style counterpart of the strict-tree /FamilyTree/{id} view. Loaded whole (like GetFamilyTreeAsync does for a single component) since the graph as a whole is small - a few hundred rows at most.
  - `nodes` GanjoorPersonGraphNode[], nullable: every person that appears in at least one edge below
    - `id` integer: GanjoorRelatedPerson.Id
    - `name` string, nullable: GanjoorRelatedPerson.Name
    - `hasFamilyTree` boolean: true if this person captions a family tree (GanjoorRelatedPerson.FamilyTreeCaption not empty) - used client-side to draw such nodes slightly larger/more prominent, and to link to their /FamilyTree/{id} strict-tree view
    - `directlyTagged` boolean: true unless this node was pulled in only because it's one hop away (a relative or affiliate) from a person actually tagged in a work's verses - see GetCatPersonGraphAsync. Always true for the whole-site graph (GetPersonGraphAsync), where there's no "work" to be tagged within. Client-side, a false value draws the node as secondary (e.g. dashed/dimmer) since it's context the reader wasn't shown directly.
    - `allusionOnly` boolean: category graphs only: the person is named in the work solely as an allusion (comparison, memory, example), never as part of its story - drawn dimmed like a one-hop addition, but labelled differently, and never used to pull in relatives
    - `importance` integer: numeric value of PersonImportance (0=Normal, 1=Important, 2=VeryImportant) - used client-side to size this node larger or smaller, see peoplegraph.js's nodeRadius()
  - `edges` GanjoorPersonGraphEdge[], nullable: every kinship edge (GanjoorPersonRelation) and non-family tie (GanjoorPersonAffiliation), merged into one flat list - see GanjoorPersonGraphEdge.Category to tell them apart
    - `person1Id` integer: first person - directional meaning (if any) depends on Category/TypeValue, same as the underlying GanjoorPersonRelation/GanjoorPersonAffiliation row
    - `person1Name` string, nullable: first person's name, denormalized here so the client doesn't need a second lookup
    - `person2Id` integer: second person
    - `person2Name` string, nullable: second person's name
    - `category` string, nullable: "Relation" for a GanjoorPersonRelation edge, "Affiliation" for a GanjoorPersonAffiliation one - tells the client which enum TypeValue is a numeric value of
    - `typeValue` integer: the numeric value of PersonRelationType (when Category is "Relation") or PersonAffiliationType (when Category is "Affiliation")
    - `degreeHint` integer, nullable: see GanjoorPersonRelation.DegreeHint - null for an Affiliation edge
    - `note` string, nullable: free-text note

## Other responses

- `400`: Bad Request

## Changes

- **2026-10-09** `285a0385568d`: 1 info
  - added the optional property `nodes/items/allusionOnly` to the response with the `200` status
- **2026-10-03** `3812f6309404`: 1 info
  - added the optional property `nodes/items/importance` to the response with the `200` status
- **2026-09-30** `da34ddd93067`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/ganjoor/apis/rmuseum-api/changes/api/people/graph/get.md)

---

[API](https://skmtc.dev/ganjoor/apis/rmuseum-api.md) - [All operations](https://skmtc.dev/ganjoor/apis/rmuseum-api/llms.txt) - [OpenAPI document](https://skmtc.dev/ganjoor/apis/rmuseum-api/revisions/143b912b1085?raw)
