---
title: "Read Thesis Command"
method: POST
path: "/thesis-commands/read"
tags: ["thesis commands"]
---

# Read Thesis Command

`POST /thesis-commands/read`

## Request

- Base URL: `https://api.tickertrac.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.tickertrac.com/thesis-commands/read`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Project one allowlisted read for an exact saved thesis version.

No telemetry or transcript row is written here, and this path has no settings,
provider, model, queue or usage dependency. History comes from the same immutable
projections as the direct workspaces; it is never reconstructed from conversation.

## Request body

- ThesisReadCommandIn: One allowlisted, model-free read over an exact saved thesis version. Raw conversation text is deliberately absent. The client may recognize ordinary language, but the server accepts only this closed command vocabulary and rejects fields it does not know.
  - `schema_version` 'thesis-read-v1', required
  - `idempotency_key` string, uuid, required
  - `operation` 'recent_effects' | 'current_state' | 'thesis_history' | 'source_inspection', required
  - `confirmation_policy` 'none', required
  - `requested_window` 'since_previous_market_close' | 'current_saved_version' | 'saved_version_history' | 'retained_source_record', required
  - `subject_type` 'company_thesis' | 'investment_theme', required
  - `subject_version` integer, required
  - `watchlist_id` integer, nullable
  - `ticker` string, nullable
  - `shared_thesis_id` integer, nullable
  - `source_record_type` 'alert' | 'theme_finding', nullable
  - `source_record_id` integer, nullable

## Response `200`

Successful Response

- union
  - ThesisReadRecentEffectsOut
    - `schema_version` 'thesis-read-v1', required
    - `idempotency_key` string, uuid, required
    - `confirmation_policy` 'none', required
    - `subject` ThesisReadSubjectOut, required
      - `subject_type` 'company_thesis' | 'investment_theme', required
      - `subject_key` string, required
      - `label` string, required
      - `narrative` string, required
      - `version_number` integer, required
      - `updated_at` string, date-time, required
      - `is_active` boolean, required
      - `workspace_path` string, required
    - `as_of` string, date-time, required
    - `read_only` true
    - `provider_calls` 0
    - `model_calls` 0
    - `operation` 'recent_effects', required
    - `requested_window` 'since_previous_market_close', required
    - `covered_window_started_at` string, date-time, required
    - `covered_window_ended_at` string, date-time, required
    - `coverage_scope` 'company_news' | 'investment_theme', required
    - `coverage_state` 'complete' | 'processing' | 'delayed' | 'paused' | 'partial' | 'not_applicable', required
    - `signals` SignalOut[]
      - `record_type` 'alert' | 'theme_finding', required
      - `alert` AlertOut
        - `id` integer, required
        - `watchlist_id` integer, nullable, required
        - `ticker` string, required
        - `source` string, required
        - `title` string, required
        - `summary` string, required
        - `source_url` string, nullable, required
        - `company_transcript_url` string, nullable
        - `detected_at` string, date-time, required
        - `evidence` string, nullable
        - `thesis_text` string, nullable
        - `materiality` 'material' | 'immaterial' | 'uncertain' | 'unknown'
        - `relevance_model` string, nullable
        - `evaluation_version` string, nullable
        - `relationship` 'support' | 'contradict' | 'neutral'
        - `directness` 'direct' | 'indirect' | 'none' | 'unknown'
        - `source_quality` 'primary' | 'reputable_secondary' | 'weak' | 'invalid' | 'unknown'
        - `novelty` 'new' | 'known' | 'duplicate' | 'unknown'
        - `citation_valid` boolean
        - `bridge_valid` boolean
        - `thesis_factor` string, nullable
        - `evidence_factor` string, nullable
        - `causal_bridge` string, nullable
        - `thesis_factor_kind` 'claim' | 'expectation' | 'invalidation' | 'narrative' | 'unknown'
        - `thesis_impact` 'strengthened' | 'weakened' | 'broken' | 'uncertain'
        - `source_locator` string, nullable
        - `source_artifact_version_id` integer, nullable
        - `source_segment_id` integer, nullable
        - `source_speaker_name` string, nullable
        - `source_section` string, nullable
        - `source_provider_code` string, nullable
        - `source_provider_item_id` string, nullable
        - `thesis_context_type` 'ticker' | 'shared'
        - `shared_thesis_id` integer, nullable
        - `shared_thesis_version_id` integer, nullable
        - `shared_thesis_version_number` integer, nullable
        - `shared_thesis_title` string, nullable
        - `shared_thesis_effect` 'tailwind' | 'headwind' | 'mixed' | 'uncertain', nullable
        - `shared_thesis_rationale` string, nullable
        - `feedback_labels` string[]
        - `has_thesis` boolean
        - `call_drift_thesis_impacts` CallDriftThesisImpactOut[]
          - `id` integer, required
          - `thesis_context_type` 'ticker' | 'shared', required
          - `shared_thesis_id` integer, nullable
          - `shared_thesis_title` string, nullable
          - `shared_thesis_effect` 'tailwind' | 'headwind' | 'mixed' | 'uncertain', nullable
          - `shared_thesis_rationale` string, nullable
          - `thesis_text` string, required
          - `reasoning` string, required
          - `materiality` 'material' | 'immaterial' | 'uncertain', required
          - `relationship` 'support' | 'contradict' | 'neutral', required
          - `thesis_factor` string, nullable
          - `evidence_factor` string, nullable
          - `causal_bridge` string, nullable
          - `thesis_factor_kind` 'claim' | 'expectation' | 'invalidation' | 'narrative' | 'unknown', required
          - `thesis_impact` 'strengthened' | 'weakened' | 'broken' | 'uncertain', required
          - `relevance_model` string, required
          - `evaluation_version` string, required
          - `evaluated_at` string, date-time, required
          - `is_backfill` boolean
          - `feedback_labels` string[]
        - `result_thesis_implications` ResultThesisImplicationsOut: Summary-first IA contract for a tenant judgment beneath shared evidence.
          - `artifact_id` integer, required
          - `source` 'ask' | 'call_drift' | 'filing_diff' | 'price_move', required
          - `state` 'not_evaluated' | 'pending' | 'ready', required
          - `implications` ResultThesisImplicationOut[]
            - `id` integer, required
            - `alert_id` integer, nullable
            - `status` 'pending' | 'relevant' | 'irrelevant' | 'abstained' | 'failed', required
            - `conclusion` 'supports' | 'weakens' | 'unrelated' | 'uncertain', required
            - `thesis_context_type` 'ticker' | 'shared', required
            - `shared_thesis_id` integer, nullable
            - `shared_thesis_title` string, nullable
            - `thesis_text` string, required
            - `reasoning` string, nullable
            - `materiality` 'material' | 'immaterial' | 'uncertain', nullable
            - `relationship` 'support' | 'contradict' | 'neutral', nullable
            - `thesis_impact` 'strengthened' | 'weakened' | 'broken' | 'uncertain', nullable
            - `thesis_factor` string, nullable
            - `evidence_factor` string, nullable
            - `causal_bridge` string, nullable
            - `evaluated_at` string, date-time, nullable
            - `is_backfill` boolean
            - `thesis_narrative` string, required
            - `thesis_components` ThesisComponentSnapshotOut[], required
              - …
      - `theme_finding` SharedThesisFindingOut: Market-wide evidence judged against a theme, not against a company. Carries the linked tickers so a company page can show it marked as theme-level. It is context there, never a company alert: the finding is about the view, and the reader's own link is what connects it to the holding.
        - `id` integer, required
        - `shared_thesis_id` integer, required
        - `shared_thesis_version_id` integer, nullable
        - `shared_thesis_version_number` integer, nullable
        - `shared_thesis_title` string, required
        - `source` string, required
        - `title` string, required
        - `summary` string, required
        - `source_url` string, nullable
        - `evidence` string, nullable
        - `detected_at` string, date-time, required
        - `materiality` string
        - `relationship` string, nullable
        - `is_backfill` boolean
        - `linked_tickers` string[]
    - `truncated` boolean
  - ThesisReadCurrentStateOut
    - `schema_version` 'thesis-read-v1', required
    - `idempotency_key` string, uuid, required
    - `confirmation_policy` 'none', required
    - `subject` ThesisReadSubjectOut, required
      - `subject_type` 'company_thesis' | 'investment_theme', required
      - `subject_key` string, required
      - `label` string, required
      - `narrative` string, required
      - `version_number` integer, required
      - `updated_at` string, date-time, required
      - `is_active` boolean, required
      - `workspace_path` string, required
    - `as_of` string, date-time, required
    - `read_only` true
    - `provider_calls` 0
    - `model_calls` 0
    - `operation` 'current_state', required
    - `requested_window` 'current_saved_version', required
    - `coverage_scope` 'saved_version'
    - `coverage_state` 'complete'
    - `current_version` union, required
      - ThesisVersionOut
        - `version_number` integer, required
        - `narrative_text` string, required
        - `components` ThesisVersionComponentOut[]
          - `id` integer, required
          - `kind` 'claim' | 'expectation' | 'invalidation', required
          - `statement` string, required
          - `position` integer, required
        - `change_kind` 'initial_snapshot' | 'narrative_saved' | 'structure_saved', required
        - `effective_at` string, date-time, required
        - `recorded_at` string, date-time, required
        - `is_current` boolean, required
        - `changes` ThesisVersionChangeOut, required
          - `narrative_changed` boolean, required
          - `added_components` ThesisVersionComponentOut[]
            - `id` integer, required
            - `kind` 'claim' | 'expectation' | 'invalidation', required
            - `statement` string, required
            - `position` integer, required
          - `removed_components` ThesisVersionComponentOut[]
            - `id` integer, required
            - `kind` 'claim' | 'expectation' | 'invalidation', required
            - `statement` string, required
            - `position` integer, required
          - `revised_components` ThesisVersionComponentRevisionOut[]
            - `before` ThesisVersionComponentOut, required: A component exactly as it appeared in one immutable thesis version.
              - …
            - `after` ThesisVersionComponentOut, required: A component exactly as it appeared in one immutable thesis version.
              - …
          - `reordered_components` ThesisVersionComponentRevisionOut[]
            - `before` ThesisVersionComponentOut, required: A component exactly as it appeared in one immutable thesis version.
              - …
            - `after` ThesisVersionComponentOut, required: A component exactly as it appeared in one immutable thesis version.
              - …
        - `revision_note` ThesisRevisionNoteOut
          - `version_number` integer, required
          - `rationale` string, nullable
          - `updated_at` string, date-time, nullable
          - `causes` ThesisRevisionCauseOut[]
            - `id` integer, required
            - `kind` 'alert' | 'source_event' | 'theme_finding', required
            - `referent_id` integer, nullable
            - `title` string, required
            - `occurred_at` string, date-time, required
            - `available_at` string, date-time, required
            - `source_url` string, nullable
            - `detail` string, nullable
            - `thesis_impact` 'strengthened' | 'weakened' | 'broken' | 'uncertain', nullable
            - `relationship` 'support' | 'contradict' | 'neutral', nullable
            - `evaluation_version` string, nullable
            - `referent_available` boolean, required
            - `asserted_by_user` true
        - `market_context_end_at` string, date-time, nullable
        - `market_performance` ThesisMarketPerformanceOut: Price context around an exact saved interval, never a thesis-quality score.
          - `ticker` string, required
          - `benchmark_ticker` string, required
          - `benchmark_label` string, required
          - `status` 'ready' | 'partial' | 'unavailable', required
          - `status_reason` 'complete_window' | 'starts_after_context' | 'ticker_history_unavailable' | 'benchmark_history_unavailable' | 'insufficient_shared_sessions', required
          - `requested_start_date` string, date, required
          - `requested_end_date` string, date, nullable
          - `start_date` string, date, nullable
          - `end_date` string, date, nullable
          - `trading_sessions` integer
          - `ticker_return_pct` number, nullable
          - `benchmark_return_pct` number, nullable
          - `relative_return_pct` number, nullable
        - `record_entry` RecordEntrySummaryOut
          - `moderation` RecordModerationOut
            - `id` string, uuid, nullable
            - `status` 'pending' | 'approved' | 'rejected' | 'needs_review', required
            - `reason` string, required
            - `category` string, nullable
            - `content_sha256` string, required
            - `can_appeal` boolean
          - `publicly_visible` boolean
          - `publication_status` 'sealed' | 'withheld' | 'published'
          - `id` string, uuid, required
          - `sequence_number` integer, required
          - `kind` 'thesis_version' | 'theme_version' | 'evidence_trail' | 'replay' | 'revision' | 'correction' | 'retraction' | 'review' | 'tracked_thesis', required
          - `visibility` 'sealed' | 'open', required
          - `ticker` string, nullable, required
          - `version_number` integer, nullable, required
          - `payload_sha256` string, required
          - `entry_sha256` string, required
          - `recorded_at` string, date-time, required
          - `opened_at` string, date-time, nullable, required
          - `public_url` string, required
          - `subject_entry_id` string, uuid, nullable
          - `as_of` string, date-time, nullable
          - `subject_type` 'company' | 'theme'
          - `shared_thesis_id` integer, nullable
          - `title` string, nullable
          - `verdict` 'stands' | 'weakening' | 'superseded', nullable
          - `watchlist_id` integer, nullable
        - `record_derived_entries` RecordEntrySummaryOut[]
          - `moderation` RecordModerationOut
            - `id` string, uuid, nullable
            - `status` 'pending' | 'approved' | 'rejected' | 'needs_review', required
            - `reason` string, required
            - `category` string, nullable
            - `content_sha256` string, required
            - `can_appeal` boolean
          - `publicly_visible` boolean
          - `publication_status` 'sealed' | 'withheld' | 'published'
          - `id` string, uuid, required
          - `sequence_number` integer, required
          - `kind` 'thesis_version' | 'theme_version' | 'evidence_trail' | 'replay' | 'revision' | 'correction' | 'retraction' | 'review' | 'tracked_thesis', required
          - `visibility` 'sealed' | 'open', required
          - `ticker` string, nullable, required
          - `version_number` integer, nullable, required
          - `payload_sha256` string, required
          - `entry_sha256` string, required
          - `recorded_at` string, date-time, required
          - `opened_at` string, date-time, nullable, required
          - `public_url` string, required
          - `subject_entry_id` string, uuid, nullable
          - `as_of` string, date-time, nullable
          - `subject_type` 'company' | 'theme'
          - `shared_thesis_id` integer, nullable
          - `title` string, nullable
          - `verdict` 'stands' | 'weakening' | 'superseded', nullable
          - `watchlist_id` integer, nullable
      - SharedThesisVersionOut
        - `version_number` integer, required
        - `title` string, required
        - `narrative_text` string, required
        - `components` ThesisVersionComponentOut[]
          - `id` integer, required
          - `kind` 'claim' | 'expectation' | 'invalidation', required
          - `statement` string, required
          - `position` integer, required
        - `links` object[]
        - `change_kind` 'initial_snapshot' | 'narrative_saved' | 'structure_saved' | 'links_saved', required
        - `effective_at` string, date-time, required
        - `recorded_at` string, date-time, required
        - `is_current` boolean, required
        - `market_contexts` ThesisPerformanceLegOut[]
          - `ticker` string, required
          - `company_name` string, nullable
          - `effect` 'tailwind' | 'headwind' | 'mixed' | 'uncertain', nullable
          - `context_start_at` string, date-time, required
          - `context_end_at` string, date-time, nullable
          - `market_performance` ThesisMarketPerformanceOut, required: Price context around an exact saved interval, never a thesis-quality score.
            - `ticker` string, required
            - `benchmark_ticker` string, required
            - `benchmark_label` string, required
            - `status` 'ready' | 'partial' | 'unavailable', required
            - `status_reason` 'complete_window' | 'starts_after_context' | 'ticker_history_unavailable' | 'benchmark_history_unavailable' | 'insufficient_shared_sessions', required
            - `requested_start_date` string, date, required
            - `requested_end_date` string, date, nullable
            - `start_date` string, date, nullable
            - `end_date` string, date, nullable
            - `trading_sessions` integer
            - `ticker_return_pct` number, nullable
            - `benchmark_return_pct` number, nullable
            - `relative_return_pct` number, nullable
        - `record_entry` RecordEntrySummaryOut
          - `moderation` RecordModerationOut
            - `id` string, uuid, nullable
            - `status` 'pending' | 'approved' | 'rejected' | 'needs_review', required
            - `reason` string, required
            - `category` string, nullable
            - `content_sha256` string, required
            - `can_appeal` boolean
          - `publicly_visible` boolean
          - `publication_status` 'sealed' | 'withheld' | 'published'
          - `id` string, uuid, required
          - `sequence_number` integer, required
          - `kind` 'thesis_version' | 'theme_version' | 'evidence_trail' | 'replay' | 'revision' | 'correction' | 'retraction' | 'review' | 'tracked_thesis', required
          - `visibility` 'sealed' | 'open', required
          - `ticker` string, nullable, required
          - `version_number` integer, nullable, required
          - `payload_sha256` string, required
          - `entry_sha256` string, required
          - `recorded_at` string, date-time, required
          - `opened_at` string, date-time, nullable, required
          - `public_url` string, required
          - `subject_entry_id` string, uuid, nullable
          - `as_of` string, date-time, nullable
          - `subject_type` 'company' | 'theme'
          - `shared_thesis_id` integer, nullable
          - `title` string, nullable
          - `verdict` 'stands' | 'weakening' | 'superseded', nullable
          - `watchlist_id` integer, nullable
        - `record_derived_entries` RecordEntrySummaryOut[]
          - `moderation` RecordModerationOut
            - `id` string, uuid, nullable
            - `status` 'pending' | 'approved' | 'rejected' | 'needs_review', required
            - `reason` string, required
            - `category` string, nullable
            - `content_sha256` string, required
            - `can_appeal` boolean
          - `publicly_visible` boolean
          - `publication_status` 'sealed' | 'withheld' | 'published'
          - `id` string, uuid, required
          - `sequence_number` integer, required
          - `kind` 'thesis_version' | 'theme_version' | 'evidence_trail' | 'replay' | 'revision' | 'correction' | 'retraction' | 'review' | 'tracked_thesis', required
          - `visibility` 'sealed' | 'open', required
          - `ticker` string, nullable, required
          - `version_number` integer, nullable, required
          - `payload_sha256` string, required
          - `entry_sha256` string, required
          - `recorded_at` string, date-time, required
          - `opened_at` string, date-time, nullable, required
          - `public_url` string, required
          - `subject_entry_id` string, uuid, nullable
          - `as_of` string, date-time, nullable
          - `subject_type` 'company' | 'theme'
          - `shared_thesis_id` integer, nullable
          - `title` string, nullable
          - `verdict` 'stands' | 'weakening' | 'superseded', nullable
          - `watchlist_id` integer, nullable
        - `revision_note` ThesisRevisionNoteOut
          - `version_number` integer, required
          - `rationale` string, nullable
          - `updated_at` string, date-time, nullable
          - `causes` ThesisRevisionCauseOut[]
            - `id` integer, required
            - `kind` 'alert' | 'source_event' | 'theme_finding', required
            - `referent_id` integer, nullable
            - `title` string, required
            - `occurred_at` string, date-time, required
            - `available_at` string, date-time, required
            - `source_url` string, nullable
            - `detail` string, nullable
            - `thesis_impact` 'strengthened' | 'weakened' | 'broken' | 'uncertain', nullable
            - `relationship` 'support' | 'contradict' | 'neutral', nullable
            - `evaluation_version` string, nullable
            - `referent_available` boolean, required
            - `asserted_by_user` true
  - ThesisReadHistoryOut
    - `schema_version` 'thesis-read-v1', required
    - `idempotency_key` string, uuid, required
    - `confirmation_policy` 'none', required
    - `subject` ThesisReadSubjectOut, required
      - `subject_type` 'company_thesis' | 'investment_theme', required
      - `subject_key` string, required
      - `label` string, required
      - `narrative` string, required
      - `version_number` integer, required
      - `updated_at` string, date-time, required
      - `is_active` boolean, required
      - `workspace_path` string, required
    - `as_of` string, date-time, required
    - `read_only` true
    - `provider_calls` 0
    - `model_calls` 0
    - `operation` 'thesis_history', required
    - `requested_window` 'saved_version_history', required
    - `coverage_scope` 'saved_history'
    - `coverage_state` 'complete' | 'partial', required
    - `versions` union[]
      - union
        - ThesisVersionOut
          - `version_number` integer, required
          - `narrative_text` string, required
          - `components` ThesisVersionComponentOut[]
            - `id` integer, required
            - `kind` 'claim' | 'expectation' | 'invalidation', required
            - `statement` string, required
            - `position` integer, required
          - `change_kind` 'initial_snapshot' | 'narrative_saved' | 'structure_saved', required
          - `effective_at` string, date-time, required
          - `recorded_at` string, date-time, required
          - `is_current` boolean, required
          - `changes` ThesisVersionChangeOut, required
            - `narrative_changed` boolean, required
            - `added_components` ThesisVersionComponentOut[]
              - …
            - `removed_components` ThesisVersionComponentOut[]
              - …
            - `revised_components` ThesisVersionComponentRevisionOut[]
              - …
            - `reordered_components` ThesisVersionComponentRevisionOut[]
              - …
          - `revision_note` ThesisRevisionNoteOut
            - `version_number` integer, required
            - `rationale` string, nullable
            - `updated_at` string, date-time, nullable
            - `causes` ThesisRevisionCauseOut[]
              - …
          - `market_context_end_at` string, date-time, nullable
          - `market_performance` ThesisMarketPerformanceOut: Price context around an exact saved interval, never a thesis-quality score.
            - `ticker` string, required
            - `benchmark_ticker` string, required
            - `benchmark_label` string, required
            - `status` 'ready' | 'partial' | 'unavailable', required
            - `status_reason` 'complete_window' | 'starts_after_context' | 'ticker_history_unavailable' | 'benchmark_history_unavailable' | 'insufficient_shared_sessions', required
            - `requested_start_date` string, date, required
            - `requested_end_date` string, date, nullable
            - `start_date` string, date, nullable
            - `end_date` string, date, nullable
            - `trading_sessions` integer
            - `ticker_return_pct` number, nullable
            - `benchmark_return_pct` number, nullable
            - `relative_return_pct` number, nullable
          - `record_entry` RecordEntrySummaryOut
            - `moderation` RecordModerationOut
              - …
            - `publicly_visible` boolean
            - `publication_status` 'sealed' | 'withheld' | 'published'
            - `id` string, uuid, required
            - `sequence_number` integer, required
            - `kind` 'thesis_version' | 'theme_version' | 'evidence_trail' | 'replay' | 'revision' | 'correction' | 'retraction' | 'review' | 'tracked_thesis', required
            - `visibility` 'sealed' | 'open', required
            - `ticker` string, nullable, required
            - `version_number` integer, nullable, required
            - `payload_sha256` string, required
            - `entry_sha256` string, required
            - `recorded_at` string, date-time, required
            - `opened_at` string, date-time, nullable, required
            - `public_url` string, required
            - `subject_entry_id` string, uuid, nullable
            - `as_of` string, date-time, nullable
            - `subject_type` 'company' | 'theme'
            - `shared_thesis_id` integer, nullable
            - `title` string, nullable
            - `verdict` 'stands' | 'weakening' | 'superseded', nullable
            - `watchlist_id` integer, nullable
          - `record_derived_entries` RecordEntrySummaryOut[]
            - `moderation` RecordModerationOut
              - …
            - `publicly_visible` boolean
            - `publication_status` 'sealed' | 'withheld' | 'published'
            - `id` string, uuid, required
            - `sequence_number` integer, required
            - `kind` 'thesis_version' | 'theme_version' | 'evidence_trail' | 'replay' | 'revision' | 'correction' | 'retraction' | 'review' | 'tracked_thesis', required
            - `visibility` 'sealed' | 'open', required
            - `ticker` string, nullable, required
            - `version_number` integer, nullable, required
            - `payload_sha256` string, required
            - `entry_sha256` string, required
            - `recorded_at` string, date-time, required
            - `opened_at` string, date-time, nullable, required
            - `public_url` string, required
            - `subject_entry_id` string, uuid, nullable
            - `as_of` string, date-time, nullable
            - `subject_type` 'company' | 'theme'
            - `shared_thesis_id` integer, nullable
            - `title` string, nullable
            - `verdict` 'stands' | 'weakening' | 'superseded', nullable
            - `watchlist_id` integer, nullable
        - SharedThesisVersionOut
          - `version_number` integer, required
          - `title` string, required
          - `narrative_text` string, required
          - `components` ThesisVersionComponentOut[]
            - `id` integer, required
            - `kind` 'claim' | 'expectation' | 'invalidation', required
            - `statement` string, required
            - `position` integer, required
          - `links` object[]
          - `change_kind` 'initial_snapshot' | 'narrative_saved' | 'structure_saved' | 'links_saved', required
          - `effective_at` string, date-time, required
          - `recorded_at` string, date-time, required
          - `is_current` boolean, required
          - `market_contexts` ThesisPerformanceLegOut[]
            - `ticker` string, required
            - `company_name` string, nullable
            - `effect` 'tailwind' | 'headwind' | 'mixed' | 'uncertain', nullable
            - `context_start_at` string, date-time, required
            - `context_end_at` string, date-time, nullable
            - `market_performance` ThesisMarketPerformanceOut, required: Price context around an exact saved interval, never a thesis-quality score.
              - …
          - `record_entry` RecordEntrySummaryOut
            - `moderation` RecordModerationOut
              - …
            - `publicly_visible` boolean
            - `publication_status` 'sealed' | 'withheld' | 'published'
            - `id` string, uuid, required
            - `sequence_number` integer, required
            - `kind` 'thesis_version' | 'theme_version' | 'evidence_trail' | 'replay' | 'revision' | 'correction' | 'retraction' | 'review' | 'tracked_thesis', required
            - `visibility` 'sealed' | 'open', required
            - `ticker` string, nullable, required
            - `version_number` integer, nullable, required
            - `payload_sha256` string, required
            - `entry_sha256` string, required
            - `recorded_at` string, date-time, required
            - `opened_at` string, date-time, nullable, required
            - `public_url` string, required
            - `subject_entry_id` string, uuid, nullable
            - `as_of` string, date-time, nullable
            - `subject_type` 'company' | 'theme'
            - `shared_thesis_id` integer, nullable
            - `title` string, nullable
            - `verdict` 'stands' | 'weakening' | 'superseded', nullable
            - `watchlist_id` integer, nullable
          - `record_derived_entries` RecordEntrySummaryOut[]
            - `moderation` RecordModerationOut
              - …
            - `publicly_visible` boolean
            - `publication_status` 'sealed' | 'withheld' | 'published'
            - `id` string, uuid, required
            - `sequence_number` integer, required
            - `kind` 'thesis_version' | 'theme_version' | 'evidence_trail' | 'replay' | 'revision' | 'correction' | 'retraction' | 'review' | 'tracked_thesis', required
            - `visibility` 'sealed' | 'open', required
            - `ticker` string, nullable, required
            - `version_number` integer, nullable, required
            - `payload_sha256` string, required
            - `entry_sha256` string, required
            - `recorded_at` string, date-time, required
            - `opened_at` string, date-time, nullable, required
            - `public_url` string, required
            - `subject_entry_id` string, uuid, nullable
            - `as_of` string, date-time, nullable
            - `subject_type` 'company' | 'theme'
            - `shared_thesis_id` integer, nullable
            - `title` string, nullable
            - `verdict` 'stands' | 'weakening' | 'superseded', nullable
            - `watchlist_id` integer, nullable
          - `revision_note` ThesisRevisionNoteOut
            - `version_number` integer, required
            - `rationale` string, nullable
            - `updated_at` string, date-time, nullable
            - `causes` ThesisRevisionCauseOut[]
              - …
    - `truncated` boolean
  - ThesisReadSourceInspectionOut
    - `schema_version` 'thesis-read-v1', required
    - `idempotency_key` string, uuid, required
    - `confirmation_policy` 'none', required
    - `subject` ThesisReadSubjectOut, required
      - `subject_type` 'company_thesis' | 'investment_theme', required
      - `subject_key` string, required
      - `label` string, required
      - `narrative` string, required
      - `version_number` integer, required
      - `updated_at` string, date-time, required
      - `is_active` boolean, required
      - `workspace_path` string, required
    - `as_of` string, date-time, required
    - `read_only` true
    - `provider_calls` 0
    - `model_calls` 0
    - `operation` 'source_inspection', required
    - `requested_window` 'retained_source_record', required
    - `coverage_scope` 'retained_source'
    - `coverage_state` 'complete'
    - `signal` SignalOut, required: One row in the unified What changed feed. The payload remains discriminated instead of flattening a market-wide theme finding into an alert-shaped object. In particular, a theme finding has no ticker: presenting one would imply a company-level causal judgment the macro evaluator deliberately did not make.
      - `record_type` 'alert' | 'theme_finding', required
      - `alert` AlertOut
        - `id` integer, required
        - `watchlist_id` integer, nullable, required
        - `ticker` string, required
        - `source` string, required
        - `title` string, required
        - `summary` string, required
        - `source_url` string, nullable, required
        - `company_transcript_url` string, nullable
        - `detected_at` string, date-time, required
        - `evidence` string, nullable
        - `thesis_text` string, nullable
        - `materiality` 'material' | 'immaterial' | 'uncertain' | 'unknown'
        - `relevance_model` string, nullable
        - `evaluation_version` string, nullable
        - `relationship` 'support' | 'contradict' | 'neutral'
        - `directness` 'direct' | 'indirect' | 'none' | 'unknown'
        - `source_quality` 'primary' | 'reputable_secondary' | 'weak' | 'invalid' | 'unknown'
        - `novelty` 'new' | 'known' | 'duplicate' | 'unknown'
        - `citation_valid` boolean
        - `bridge_valid` boolean
        - `thesis_factor` string, nullable
        - `evidence_factor` string, nullable
        - `causal_bridge` string, nullable
        - `thesis_factor_kind` 'claim' | 'expectation' | 'invalidation' | 'narrative' | 'unknown'
        - `thesis_impact` 'strengthened' | 'weakened' | 'broken' | 'uncertain'
        - `source_locator` string, nullable
        - `source_artifact_version_id` integer, nullable
        - `source_segment_id` integer, nullable
        - `source_speaker_name` string, nullable
        - `source_section` string, nullable
        - `source_provider_code` string, nullable
        - `source_provider_item_id` string, nullable
        - `thesis_context_type` 'ticker' | 'shared'
        - `shared_thesis_id` integer, nullable
        - `shared_thesis_version_id` integer, nullable
        - `shared_thesis_version_number` integer, nullable
        - `shared_thesis_title` string, nullable
        - `shared_thesis_effect` 'tailwind' | 'headwind' | 'mixed' | 'uncertain', nullable
        - `shared_thesis_rationale` string, nullable
        - `feedback_labels` string[]
        - `has_thesis` boolean
        - `call_drift_thesis_impacts` CallDriftThesisImpactOut[]
          - `id` integer, required
          - `thesis_context_type` 'ticker' | 'shared', required
          - `shared_thesis_id` integer, nullable
          - `shared_thesis_title` string, nullable
          - `shared_thesis_effect` 'tailwind' | 'headwind' | 'mixed' | 'uncertain', nullable
          - `shared_thesis_rationale` string, nullable
          - `thesis_text` string, required
          - `reasoning` string, required
          - `materiality` 'material' | 'immaterial' | 'uncertain', required
          - `relationship` 'support' | 'contradict' | 'neutral', required
          - `thesis_factor` string, nullable
          - `evidence_factor` string, nullable
          - `causal_bridge` string, nullable
          - `thesis_factor_kind` 'claim' | 'expectation' | 'invalidation' | 'narrative' | 'unknown', required
          - `thesis_impact` 'strengthened' | 'weakened' | 'broken' | 'uncertain', required
          - `relevance_model` string, required
          - `evaluation_version` string, required
          - `evaluated_at` string, date-time, required
          - `is_backfill` boolean
          - `feedback_labels` string[]
        - `result_thesis_implications` ResultThesisImplicationsOut: Summary-first IA contract for a tenant judgment beneath shared evidence.
          - `artifact_id` integer, required
          - `source` 'ask' | 'call_drift' | 'filing_diff' | 'price_move', required
          - `state` 'not_evaluated' | 'pending' | 'ready', required
          - `implications` ResultThesisImplicationOut[]
            - `id` integer, required
            - `alert_id` integer, nullable
            - `status` 'pending' | 'relevant' | 'irrelevant' | 'abstained' | 'failed', required
            - `conclusion` 'supports' | 'weakens' | 'unrelated' | 'uncertain', required
            - `thesis_context_type` 'ticker' | 'shared', required
            - `shared_thesis_id` integer, nullable
            - `shared_thesis_title` string, nullable
            - `thesis_text` string, required
            - `reasoning` string, nullable
            - `materiality` 'material' | 'immaterial' | 'uncertain', nullable
            - `relationship` 'support' | 'contradict' | 'neutral', nullable
            - `thesis_impact` 'strengthened' | 'weakened' | 'broken' | 'uncertain', nullable
            - `thesis_factor` string, nullable
            - `evidence_factor` string, nullable
            - `causal_bridge` string, nullable
            - `evaluated_at` string, date-time, nullable
            - `is_backfill` boolean
            - `thesis_narrative` string, required
            - `thesis_components` ThesisComponentSnapshotOut[], required
              - …
      - `theme_finding` SharedThesisFindingOut: Market-wide evidence judged against a theme, not against a company. Carries the linked tickers so a company page can show it marked as theme-level. It is context there, never a company alert: the finding is about the view, and the reader's own link is what connects it to the holding.
        - `id` integer, required
        - `shared_thesis_id` integer, required
        - `shared_thesis_version_id` integer, nullable
        - `shared_thesis_version_number` integer, nullable
        - `shared_thesis_title` string, required
        - `source` string, required
        - `title` string, required
        - `summary` string, required
        - `source_url` string, nullable
        - `evidence` string, nullable
        - `detected_at` string, date-time, required
        - `materiality` string
        - `relationship` string, nullable
        - `is_backfill` boolean
        - `linked_tickers` string[]

## Other responses

- `422`: Validation Error

---

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