---
title: "people connected to this person by kinship or by an overlap-implying affiliation, with those ties, for the \"who could have been alive at the same time\" view"
method: GET
path: "/api/people/{id}/contemporaries"
tags: ["GanjoorRelatedPerson"]
---

# people connected to this person by kinship or by an overlap-implying affiliation, with those ties, for the "who could have been alive at the same time" view

`GET /api/people/{id}/contemporaries`

## 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/{id}/contemporaries`
- Auth: none declared

## Path parameters

- `id` integer, required

## Response `200`

OK

- GanjoorContemporaryGraphViewModel: everything the "who could have been alive at the same time" view needs for one person: the people connected to them through kinship or through an affiliation that implies overlapping lifetimes, and those ties themselves. The timing reasoning is done client-side (contemporaries.js) because it depends on assumptions the viewer can change (maximum lifespan, minimum parent age).
  - `rootId` integer: the person the view was opened for
  - `persons` GanjoorRelatedPerson[], nullable: every person reachable through the ties below
    - `id` integer: id
    - `name` string, nullable: name
    - `description` string, nullable: description
    - `wikiUrl` string, nullable: wikipedia url
    - `birthYearInLHijri` integer: birth year in lunar hijri
    - `deathYearInLHijri` integer: death year in lunar hijri
    - `validBirthDate` boolean: BirthYearInLHijri, for some poets it is only indicator of their century of birth and should not be relied as their valid birth date
    - `validDeathDate` boolean: DeathYearInLHijri, for some poets it is only indicator of their century of death and should not be relied as their valid death date
    - `birthLocationId` integer, nullable: birth location id
    - `birthLocation` GanjoorGeoLocation: Geo Locations (Cities) referred by Ganjoor Metadata
      - `id` integer: id
      - `name` string, nullable: name
      - `latitude` number, double: Latitude
      - `longitude` number, double: Longitude
      - `machineGenerated` boolean: AI generated
    - `deathLocationId` integer, nullable: death location id
    - `deathLocation` GanjoorGeoLocation: Geo Locations (Cities) referred by Ganjoor Metadata
      - `id` integer: id
      - `name` string, nullable: name
      - `latitude` number, double: Latitude
      - `longitude` number, double: Longitude
      - `machineGenerated` boolean: AI generated
    - `machineGenerated` boolean: AI generated
    - `familyTreeCaption` string, nullable: optional caption for the family tree this person is treated as the root of (e.g. "ساسانیان", "آل برمک") - purely a display label for whoever a tree is being browsed from; nothing enforces that this person actually has no recorded ancestors themselves, and most people will leave this null (only whichever person a tree is "named after" needs one set).
    - `importance` 0 | 1 | 2: how editorially prominent a GanjoorRelatedPerson is treated as - purely a display/sizing hint (see GanjoorRelatedPerson.Importance, GanjoorPersonGraphNode.Importance and peoplegraph.js's nodeRadius()), never used to filter, rank or otherwise affect query results. New values can be appended safely later (stored as int).
    - `gender` 0 | 1 | 2: a GanjoorRelatedPerson's gender - used only by the family-tree chart (familytree.js's buildLayout()) to break ties when a child has two recorded parents and both happen to have their own recorded ancestors (so neither side can be preferred on "continues a documented lineage" grounds alone): the father is preferred as the tree's spine parent, matching conventional patrilineal genealogy-chart practice, with the mother then drawn attached beside him. Never used to filter, rank or otherwise affect query results. New values can be appended safely later (stored as int).
    - `aliases` string, nullable: other names this person is known by (epithets, titles, alternative spellings), separated by the Persian comma (،) - e.g. for رستم: «تهمتن، رستم دستان، پور زال». Used by the AI tagging jobs to match a name in a poem to this person, and filled automatically when two people are merged
  - `kin` GanjoorContemporaryKinTie[], nullable: kinship ties (GanjoorPersonRelation)
    - `person1Id` integer: Person1 (parent/ancestor side for Parent and Ancestor)
    - `person2Id` integer: Person2
    - `relationType` integer: PersonRelationType numeric value: 0 Parent, 1 Sibling, 2 Spouse, 3 Ancestor
    - `degreeHint` integer, nullable: generations between Person1 and Person2 for Ancestor, when known
  - `affiliations` GanjoorContemporaryAffiliationTie[], nullable: affiliation ties that imply the two were alive at the same time (see GanjoorRelatedPersonService.OverlapAffiliationTypes)
    - `person1Id` integer: Person1 (see PersonAffiliationType for direction - e.g. Person1 killed Person2)
    - `person2Id` integer: Person2
    - `affiliationType` integer: PersonAffiliationType numeric value

## Other responses

- `400`: Bad Request

## Changes

- **2026-10-10** `330e7bb195c1`: 1 info
  - added the optional property `persons/items/aliases` to the response with the `200` status
- **2026-10-08** `234cbf41d38b`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/ganjoor/apis/rmuseum-api/changes/api/people/:id/contemporaries/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)
