---
title: "Confirm Thesis Revision"
method: POST
path: "/thesis-commands/revision-confirmations"
tags: ["thesis commands"]
---

# Confirm Thesis Revision

`POST /thesis-commands/revision-confirmations`

## 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/revision-confirmations`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Save one explicitly confirmed narrative through immutable thesis history.

The exact confirmation and proposal UUIDs are recorded on the new immutable version, so
an identical retry returns that version while a reused key with changed content
fails closed. Components, links, title and monitoring state are never writable
through this contract.

## Request body

- ThesisRevisionConfirmationIn: One explicit approval of an exact narrative proposal and base version.
  - `schema_version` 'thesis-revision-confirmation-v1', required
  - `idempotency_key` string, uuid, required
  - `proposal_idempotency_key` string, uuid, required
  - `operation` 'save_revision', required
  - `confirmation_policy` 'explicit_approval_required', required
  - `confirmation_statement` 'I confirm this exact wording should become the current saved thesis.', required
  - `proposal_scope` 'narrative_only', required
  - `subject_type` 'company_thesis' | 'investment_theme', required
  - `subject_version` integer, required
  - `watchlist_id` integer, nullable
  - `ticker` string, nullable
  - `shared_thesis_id` integer, nullable
  - `proposed_narrative` string, required

## Response `200`

Successful Response

- ThesisRevisionConfirmationOut: The exact immutable version created by a confirmed revision request.
  - `schema_version` 'thesis-revision-confirmation-v1', required
  - `idempotency_key` string, uuid, required
  - `proposal_idempotency_key` string, uuid, required
  - `operation` 'save_revision', required
  - `confirmation_policy` 'explicit_approval_required', required
  - `confirmation_statement` 'I confirm this exact wording should become the current saved thesis.', required
  - `proposal_scope` 'narrative_only', required
  - `subject_type` 'company_thesis' | 'investment_theme', required
  - `subject_key` string, required
  - `workspace_path` string, required
  - `base_version_number` integer, required
  - `saved_version_number` integer, required
  - `save_status` 'saved'
  - `request_replayed` boolean, required
  - `version_created_by_request` boolean, required
  - `saved_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.
            - `id` integer, required
            - `kind` 'claim' | 'expectation' | 'invalidation', required
            - `statement` string, required
            - `position` integer, required
          - `after` ThesisVersionComponentOut, required: A component exactly as it appeared in one immutable thesis version.
            - `id` integer, required
            - `kind` 'claim' | 'expectation' | 'invalidation', required
            - `statement` string, required
            - `position` integer, required
        - `reordered_components` ThesisVersionComponentRevisionOut[]
          - `before` ThesisVersionComponentOut, required: A component exactly as it appeared in one immutable thesis version.
            - `id` integer, required
            - `kind` 'claim' | 'expectation' | 'invalidation', required
            - `statement` string, required
            - `position` integer, required
          - `after` ThesisVersionComponentOut, required: A component exactly as it appeared in one immutable thesis version.
            - `id` integer, required
            - `kind` 'claim' | 'expectation' | 'invalidation', required
            - `statement` string, required
            - `position` integer, required
      - `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
  - `relationships_changed` false
  - `unchanged_relationship_count` integer, required
  - `transcript_persisted` false
  - `provider_calls` 0
  - `model_calls` 0
  - `confirmed_at` string, date-time, required

## 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)
