---
title: "List Child Records"
method: GET
path: "/records/{child_id}"
tags: ["records"]
---

# List Child Records

`GET /records/{child_id}`

## Request

- Base URL: `https://api.projectindi.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.projectindi.com/records/{child_id}`
- Auth: none declared

Merged, date-sorted feed of every record kind for a child.

Authentication: JWT required. Family members see all family records; a
non-family caller sees only the documents and drafts they wrote (the
Documents tab's gate). For documents the gate enforces it, since RLS
admits clinicians. For drafts RLS agrees since #11702's migration, and the
gate keeps the api right in any environment that migration hasn't reached.

Finalised clinic reports join the feed only when asked (`include=report`,
or `kind=report`), which only appweb sends: without it the response is
exactly what installed mobile builds already read
(`tests/api/records/test_report_opt_in.py` pins it byte for byte).

## Path parameters

- `child_id` string, required

## Query parameters

- `kind` 'all' | 'document' | 'draft' | 'email' | 'outbox' | 'media' | 'report'
- `search` string, nullable
- `cursor` string, nullable
- `limit` integer
- `include` 'report', nullable

## Response `200`

Successful Response

- RecordsFeedResponse
  - `entries` union[], required
    - union
      - DocumentFeedEntry
        - `kind` 'document'
        - `id` string, required
        - `timestamp` string, required
        - `document` DocumentResponse, required
          - `id` string, required
          - `user_id` string, required
          - `child_id` string, required
          - `conversation_id` string, nullable
          - `file_name` string, required
          - `file_type` string, required
          - `file_url` string, required
          - `file_size` integer, nullable
          - `ai_title` string, nullable
          - `ai_description` string, nullable
          - `summary` string, nullable
          - `status` string, nullable
          - `failure_reason` string, nullable
          - `created_at` string, required
          - `updated_at` string, required
          - `source` string, nullable
          - `email_id` string, nullable
          - `match_snippet` string, nullable
          - `message_id` string, nullable
          - `attachment_index` integer, nullable
          - `duration_seconds` number, nullable
          - `is_duplicate` boolean
      - MediaFeedEntry
        - `kind` 'media'
        - `id` string, required
        - `timestamp` string, required
        - `document` DocumentResponse, required
          - `id` string, required
          - `user_id` string, required
          - `child_id` string, required
          - `conversation_id` string, nullable
          - `file_name` string, required
          - `file_type` string, required
          - `file_url` string, required
          - `file_size` integer, nullable
          - `ai_title` string, nullable
          - `ai_description` string, nullable
          - `summary` string, nullable
          - `status` string, nullable
          - `failure_reason` string, nullable
          - `created_at` string, required
          - `updated_at` string, required
          - `source` string, nullable
          - `email_id` string, nullable
          - `match_snippet` string, nullable
          - `message_id` string, nullable
          - `attachment_index` integer, nullable
          - `duration_seconds` number, nullable
          - `is_duplicate` boolean
      - DraftFeedEntry
        - `kind` 'draft'
        - `id` string, required
        - `timestamp` string, required
        - `draft` ArtefactResponse, required
          - `id` string, required
          - `child_id` string, required
          - `user_id` string, required
          - `artefact_type` string, required
          - `content` string, required
          - `is_hidden` boolean, required
          - `created_at` string, required
          - `file_url` string, nullable
          - `file_name` string, nullable
          - `file_type` string, nullable
          - `file_size` integer, nullable
          - `ai_title` string, nullable
          - `ai_summary` string, nullable
      - EmailFeedEntry
        - `kind` 'email'
        - `id` string, required
        - `timestamp` string, required
        - `email` EmailListItem, required
          - `email_id` string, required
          - `from_name` string, nullable
          - `from_email` string, required
          - `subject` string, required
          - `preview` string, nullable
          - `received_at` string, required
          - `is_read` boolean, required
          - `attachment_count` integer, required
          - `verification` EmailVerification, required
            - `spf` string, nullable
            - `dkim` string, nullable
            - `dmarc` string, nullable
          - `reply_count` integer
      - OutboxFeedEntry
        - `kind` 'outbox'
        - `id` string, required
        - `timestamp` string, required
        - `outbox` OutboxEntryPayload, required: Pydantic mirror of the Strawberry `OutboundEntry` (`api/src/api/graph/parent/outbound/types.py`). Kept field-for-field in sync by hand; `tests/api/records/test_types.py` fails if the two drift.
          - `id` string, required
          - `type` string, required
          - `recipients` OutboxRecipientPayload[], required
            - `email` string, nullable
            - `resolved_name` string, nullable
          - `subject` string, required
          - `sent_at` string, required
          - `status` string, required
          - `snapshot_url` string, nullable
          - `child_id` string, nullable
          - `invite_status` string, nullable
          - `expires_at` string, nullable
          - `child_care_team_id` string, nullable
      - ReportFeedEntry: A finalised clinic document. Opt-in (`include=report`): installed mobile builds don't know the kind, so they must never be sent one.
        - `kind` 'report'
        - `id` string, required
        - `timestamp` string, required
        - `report` RecordReport, required
          - `document_id` string, required
          - `template_name` string, required
          - `kind` 'session_note' | 'referral', required
          - `organisation_name` string, required
          - `author_name` string, nullable
          - `session_date` string, required
          - `finalised_at` string, required
          - `amended` boolean, required
  - `next_cursor` string, nullable
  - `has_more` boolean, required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/projectindi/apis/indi-agent-api-first-principles.md) - [All operations](https://skmtc.dev/projectindi/apis/indi-agent-api-first-principles/llms.txt) - [OpenAPI document](https://skmtc.dev/projectindi/apis/indi-agent-api-first-principles/revisions/25a7813e21fd?raw)
