---
title: "Parent ↔ Child Links"
url: https://docs.growamal.com/en/guides/parent-child-links/
language: en
---

# Parent ↔ Child Links

## The junction

A parent is connected to a student through the **ParentStudent** junction, which carries a
`relationship` (`MOTHER` \| `FATHER` \| `GUARDIAN` \| `OTHER`) and an `isPrimary` flag.

## Link a parent to a child

```bash
curl -X POST https://localhost:3000/api/parents/{parentId}/children/{studentId} \
  -H "Authorization: Bearer <accessToken>" \
  -H "Content-Type: application/json" \
  -d '{ "relationship": "MOTHER", "isPrimary": true }'
```

Returns `201` `ParentStudentRowResponse`. This action requires **Admin or Manager** access (the `VIEW_ORG` permission). A district-scoped Manager can only link parents and students within their scoped schools; the handler calls `canReachStudent` to enforce this boundary. Cross-org links are rejected with `422` regardless of the caller. `{parentId}` and `{studentId}` are the integer user IDs of the parent and student.

## Why the link references User, not StudentProfile

`studentUserId` points at the **User**, not the StudentProfile, for deletion semantics: if a
StudentProfile is deleted and later re-created, the parental link survives because it was anchored to
the stable User row.

## Parent scope

A parent persona can read its own children's data: `VIEW_OWN_CHILDREN`, `VIEW_PARENT_REPORTS`, and
its own child's accessibility config. Parents **cannot** reach any tenancy endpoint (organizations,
schools, classes). See [Core Concepts → RBAC](https://docs.growamal.com/en/core-concepts/).
