---
title: "Get Mind Journal"
method: GET
path: "/api/mind/v2/perspective/{identity_id}/journal"
tags: ["mind-v2"]
---

# Get Mind Journal

`GET /api/mind/v2/perspective/{identity_id}/journal`

## Request

- Base URL: `https://app.thinqos.com` (the document declares no server; this is the origin it was published from)
- URL: `https://app.thinqos.com/api/mind/v2/perspective/{identity_id}/journal`
- Auth: none declared

The Mind Journal change feed (TOS-1980): four sections replacing the
old "Needs You" panel.

- ``new_lessons``: consolidated propositions awaiting nothing (viewing is
  enough) - same source/filter as the existing ``/consolidated`` endpoint
  (``confirmed=False``, not dismissed), so the existing action endpoints
  (confirm/dismiss/forget) keep working unchanged.
- ``now_stable``: earned-stable ratification promotions (TOS-1982 Phase
  1), excluding any evaluation the user has since reverted via
  ``/ratify-revert`` - a durable veto, not a temporary demotion.
- ``needs_decision``: open conflicts ordered by urgency descending - one of
  the two categories the Mind nav badge itself counts (TOS-2464). The
  other is ``MindEvaluation.lifecycle_status == "pending_review"`` -
  manual-mode quarantine, not a plain unconfirmed row - so the badge and
  this section can disagree on ``new_lessons``: an auto-mode lesson shows
  up here for review but does not add to the badge, because nothing is
  actually blocked on it. See ``PerspectiveService.attention_counts``.
- ``retrospect`` (TOS-2264 Phase A): self-critique findings from the
  sleep cycle's retrospect stage, most recent first - every finding is
  shown regardless of whether its proposal auto-applied or is awaiting
  owner review.

Each section is capped at ``limit`` (default 20) and carries its own
``total`` so the UI can render "showing N of TOTAL" per section
independently. ``cognitive_events`` is read-only here; every row action
(confirm/dismiss/forget/ratify-revert/conflict-resolve) goes through its
existing dedicated endpoint, never through this route.

## Path parameters

- `identity_id` string, uuid, required

## Query parameters

- `limit` integer

## Headers

- `x-impersonate-identity-id` string, nullable

## Response `200`

Successful Response

- V2JournalResponse: GET /perspective/{identity_id}/journal - the Mind Journal change feed.
  - `new_lessons` V2JournalNewLessonsSection, required: Consolidated abstractions awaiting nothing - viewing is enough. Reuses ``V2ConsolidatedProposition`` verbatim (same shape the existing ``/consolidated`` endpoint returns) so the row-evidence fields (reinforcement_count, activation_count, last_activated_at, confidence, protection_level) come for free off ``V2MindEvaluation``.
    - `items` V2ConsolidatedProposition[]
      - `proposition` V2Proposition, required
        - `id` string, uuid, required
        - `subject_entity_id` string, uuid, nullable, required
        - `predicate` string, nullable, required
        - `object_entity_id` string, uuid, nullable, required
        - `claim_key` string, nullable, required
        - `summary` string, required
        - `content` object, required
        - `source` string, required
        - `created_at` string, date-time, required
        - `evaluation` V2MindEvaluation, required
          - `id` string, uuid, required
          - `confidence` number, required
          - `salience` number, required
          - `decay_rate` number, required
          - `valence` number, required
          - `arousal` number, required
          - `confirmed` boolean, required
          - `protection_level` 'none' | 'seeded' | 'user_confirmed' | 'system_consolidated' | 'system_stable' | 'locked', required
          - `layer` 'core' | 'reinforced' | 'transient', required
          - `importance` number, nullable
          - `created_at` string, date-time, required
          - `constitution_pinned` boolean
          - `lifecycle_status` 'active' | 'contradicted' | 'superseded' | 'archived' | 'pending_review', required
          - `source_type` 'declared' | 'extracted' | 'inferred' | 'observed' | 'consolidated' | 'constitutional' | 'external_observed' | 'imported', required
          - `reinforcement_count` integer, required
          - `last_reinforced_at` string, date-time, required
          - `last_challenged_at` string, date-time, nullable, required
          - `activation_count` integer
          - `usage_count` integer
          - `last_stated_at` string, date-time, nullable
          - `last_recalled_at` string, date-time, nullable
          - `last_activated_at` string, date-time, nullable
        - `source_chat` V2PropositionSourceChat: Source-conversation provenance for an extracted proposition. TOS-256 introduced this for external captures only; TOS-615 P3 unified it across both conversation kinds: - ``kind="external"``: the backing chat arrived through an external ingest adapter (non-null ``chats.source``). ``source`` / ``source_external_id`` drive the connected-integrations session back-link, exactly as before. - ``kind="in_app"``: a normal thinqOS chat. ``chat_id`` / ``chat_title`` drive the Evidence panel's deep link to the conversation; they are populated ONLY when the caller is a participant of that chat (active or left). Non-participant callers get ``source_chat=null`` instead. ``display_label`` is the chat's default agent identity display name (e.g. ``"Claude Code"``) - convenient for rendering without a second lookup. ``window_seq`` is the source turn's 1-based position within the chat. ``occurred_at`` is the created_at of the earliest live assert_proposition event - "when this was learned".
          - `kind` string
          - `source` string, nullable
          - `source_external_id` string, nullable
          - `instance_id` string, nullable
          - `display_label` string, nullable
          - `label` string, nullable
          - `window_seq` integer, nullable
          - `chat_id` string, nullable
          - `chat_title` string, nullable
          - `occurred_at` string, date-time, nullable
        - `position` V2Position: Stored mind-graph coordinate (TOS-518). Null until the layout pass runs.
          - `x` number, required
          - `y` number, required
          - `z` number, required
        - `about` string, nullable
        - `status` string, nullable
      - `supporting_evaluation_ids` string[]
    - `total` integer
  - `now_stable` V2JournalStableSection, required
    - `items` V2JournalStableItem[]
      - `evaluation_id` string, uuid, required
      - `proposition` V2Proposition, required
        - `id` string, uuid, required
        - `subject_entity_id` string, uuid, nullable, required
        - `predicate` string, nullable, required
        - `object_entity_id` string, uuid, nullable, required
        - `claim_key` string, nullable, required
        - `summary` string, required
        - `content` object, required
        - `source` string, required
        - `created_at` string, date-time, required
        - `evaluation` V2MindEvaluation, required
          - `id` string, uuid, required
          - `confidence` number, required
          - `salience` number, required
          - `decay_rate` number, required
          - `valence` number, required
          - `arousal` number, required
          - `confirmed` boolean, required
          - `protection_level` 'none' | 'seeded' | 'user_confirmed' | 'system_consolidated' | 'system_stable' | 'locked', required
          - `layer` 'core' | 'reinforced' | 'transient', required
          - `importance` number, nullable
          - `created_at` string, date-time, required
          - `constitution_pinned` boolean
          - `lifecycle_status` 'active' | 'contradicted' | 'superseded' | 'archived' | 'pending_review', required
          - `source_type` 'declared' | 'extracted' | 'inferred' | 'observed' | 'consolidated' | 'constitutional' | 'external_observed' | 'imported', required
          - `reinforcement_count` integer, required
          - `last_reinforced_at` string, date-time, required
          - `last_challenged_at` string, date-time, nullable, required
          - `activation_count` integer
          - `usage_count` integer
          - `last_stated_at` string, date-time, nullable
          - `last_recalled_at` string, date-time, nullable
          - `last_activated_at` string, date-time, nullable
        - `source_chat` V2PropositionSourceChat: Source-conversation provenance for an extracted proposition. TOS-256 introduced this for external captures only; TOS-615 P3 unified it across both conversation kinds: - ``kind="external"``: the backing chat arrived through an external ingest adapter (non-null ``chats.source``). ``source`` / ``source_external_id`` drive the connected-integrations session back-link, exactly as before. - ``kind="in_app"``: a normal thinqOS chat. ``chat_id`` / ``chat_title`` drive the Evidence panel's deep link to the conversation; they are populated ONLY when the caller is a participant of that chat (active or left). Non-participant callers get ``source_chat=null`` instead. ``display_label`` is the chat's default agent identity display name (e.g. ``"Claude Code"``) - convenient for rendering without a second lookup. ``window_seq`` is the source turn's 1-based position within the chat. ``occurred_at`` is the created_at of the earliest live assert_proposition event - "when this was learned".
          - `kind` string
          - `source` string, nullable
          - `source_external_id` string, nullable
          - `instance_id` string, nullable
          - `display_label` string, nullable
          - `label` string, nullable
          - `window_seq` integer, nullable
          - `chat_id` string, nullable
          - `chat_title` string, nullable
          - `occurred_at` string, date-time, nullable
        - `position` V2Position: Stored mind-graph coordinate (TOS-518). Null until the layout pass runs.
          - `x` number, required
          - `y` number, required
          - `z` number, required
        - `about` string, nullable
        - `status` string, nullable
      - `promoted_at` string, date-time, required
      - `reinforcement_count` integer, required
      - `distinct_activation_days` integer, required
      - `age_days` number, required
      - `conflict_check` string, required
      - `claim_key` string, nullable
    - `total` integer
  - `needs_decision` V2JournalDecisionsSection, required: Open conflicts - the one genuinely blocking category.
    - `items` V2Conflict[]
      - `conflict_id` string, uuid, required
      - `cause` string, required
      - `a` V2ConflictSide, required
        - `proposition_id` string, uuid, required
        - `evaluation_id` string, uuid, nullable, required
        - `summary` string, required
        - `confidence` number, nullable, required
      - `b` V2ConflictSide, required
        - `proposition_id` string, uuid, required
        - `evaluation_id` string, uuid, nullable, required
        - `summary` string, required
        - `confidence` number, nullable, required
      - `urgency` number
      - `proposition_a_provenance` V2PropositionSourceChat: Source-conversation provenance for an extracted proposition. TOS-256 introduced this for external captures only; TOS-615 P3 unified it across both conversation kinds: - ``kind="external"``: the backing chat arrived through an external ingest adapter (non-null ``chats.source``). ``source`` / ``source_external_id`` drive the connected-integrations session back-link, exactly as before. - ``kind="in_app"``: a normal thinqOS chat. ``chat_id`` / ``chat_title`` drive the Evidence panel's deep link to the conversation; they are populated ONLY when the caller is a participant of that chat (active or left). Non-participant callers get ``source_chat=null`` instead. ``display_label`` is the chat's default agent identity display name (e.g. ``"Claude Code"``) - convenient for rendering without a second lookup. ``window_seq`` is the source turn's 1-based position within the chat. ``occurred_at`` is the created_at of the earliest live assert_proposition event - "when this was learned".
        - `kind` string
        - `source` string, nullable
        - `source_external_id` string, nullable
        - `instance_id` string, nullable
        - `display_label` string, nullable
        - `label` string, nullable
        - `window_seq` integer, nullable
        - `chat_id` string, nullable
        - `chat_title` string, nullable
        - `occurred_at` string, date-time, nullable
      - `proposition_b_provenance` V2PropositionSourceChat: Source-conversation provenance for an extracted proposition. TOS-256 introduced this for external captures only; TOS-615 P3 unified it across both conversation kinds: - ``kind="external"``: the backing chat arrived through an external ingest adapter (non-null ``chats.source``). ``source`` / ``source_external_id`` drive the connected-integrations session back-link, exactly as before. - ``kind="in_app"``: a normal thinqOS chat. ``chat_id`` / ``chat_title`` drive the Evidence panel's deep link to the conversation; they are populated ONLY when the caller is a participant of that chat (active or left). Non-participant callers get ``source_chat=null`` instead. ``display_label`` is the chat's default agent identity display name (e.g. ``"Claude Code"``) - convenient for rendering without a second lookup. ``window_seq`` is the source turn's 1-based position within the chat. ``occurred_at`` is the created_at of the earliest live assert_proposition event - "when this was learned".
        - `kind` string
        - `source` string, nullable
        - `source_external_id` string, nullable
        - `instance_id` string, nullable
        - `display_label` string, nullable
        - `label` string, nullable
        - `window_seq` integer, nullable
        - `chat_id` string, nullable
        - `chat_title` string, nullable
        - `occurred_at` string, date-time, nullable
    - `total` integer
  - `retrospect` V2JournalRetrospectSection, required
    - `items` V2JournalRetrospectItem[]
      - `message_id` string, uuid, required
      - `score` number, required
      - `signals` object, required
      - `finding_summary` string, required
      - `proposed_field` string, required
      - `rationale` string, required
      - `confidence` number, required
      - `proposal_id` string, uuid, required
      - `proposal_status` string, required
      - `created_at` string, date-time, required
    - `total` integer

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/thinqos/apis/thinqos-api.md) · [All operations](https://skmtc.dev/thinqos/apis/thinqos-api/llms.txt) · [OpenAPI document](https://skmtc.dev/thinqos/apis/thinqos-api/revisions/ce2c2ce318b1?raw)
