---
title: "Get current mtDNA curation"
method: GET
path: "/sessions/{session_id}/variants/{variant_idx}/mtdna-curation"
tags: ["mtdna-curation"]
---

# Get current mtDNA curation

`GET /sessions/{session_id}/variants/{variant_idx}/mtdna-curation`

## Request

- Base URL: `https://api.helena.bio` (the document declares no server; this is the origin it was published from)
- URL: `https://api.helena.bio/sessions/{session_id}/variants/{variant_idx}/mtdna-curation`
- Auth: HTTP bearer

Read current mtDNA curation + evaluator overlay. No audit emission.

Pipeline acmg_class / acmg_criteria are resolved server-side from the
session DuckDB raw_variants table (HELIX-CR-2026-MTDNA: replaces the
earlier "frontend composes" pattern). Failure to read DuckDB returns
(None, None) and is treated as non-fatal degradation -- curation
fields and evaluator overlay remain valid response components.

## Path parameters

- `session_id` string, uuid, required
- `variant_idx` integer, required

## Response `200`

Successful Response

- CurationResponse: PATCH/GET response payload. PATCH returns audit_event_id (UUID); GET returns audit_event_id=None (read operations do not emit audit events).
  - `session_id` string, uuid, required
  - `variant_idx` integer, required
  - `curation_fields` MtdnaCurationFields, required: 13 mtDNA curation data fields. All optional -- used both as PATCH body (partial update; only provided fields are persisted) and as GET response payload (all fields surfaced with current stored values, None for unpopulated criteria). Field-level validators encode McCormick 2020 Table 1 strength tiers and non-negative count invariants. Server-side defense-in-depth: domain entity also re-validates in __post_init__ (single source of truth for invariants).
    - `mt_ps2_strength` string, nullable: PS2 (de novo) strength: VeryStrong/Strong/Moderate/Supporting
    - `mt_ps3_evidence` string, nullable: PS3 functional studies evidence (cybrid + ETC <20% + load >=60%)
    - `mt_ps4_proband_count` integer, nullable: PS4 unrelated proband count
    - `mt_ps4_haplogroup_diversity_count` integer, nullable: PS4 distinct top-level haplogroup count among probands
    - `mt_pm6_strength` string, nullable: PM6 (de novo without maternity confirmation) strength
    - `mt_pp1_maternal_member_count` integer, nullable: PP1 maternal family member count
    - `mt_pp1_homoplasmic_in_all` boolean, nullable: PP1 disqualifier: TRUE when variant is homoplasmic in all maternal members (segregation evidence cannot establish pathogenicity per ClinGen mtDNA VCEP v1.0.0; PP1 suppressed and Cat M7a audit fires).
    - `mt_pp1_heteroplasmy_correlation` boolean, nullable: PP1 heteroplasmy correlates with disease severity
    - `mt_pp4_etc_deficiency` string, nullable: PP4 ETC enzyme deficiency evidence (<20% activity)
    - `mt_bs2_strength` string, nullable: BS2 (heteroplasmy in healthy adult) strength: Strong or Supporting
    - `mt_bs3_evidence` string, nullable: BS3 functional studies evidence (no effect)
    - `mt_bs4_evidence` string, nullable: BS4 lack of segregation OR paternal segregation
    - `mt_bp5_evidence` string, nullable: BP5 mtDNA variant in nDNA-related disease case
  - `curation_state` CurationStateResponse, required: Evaluator output -- what curated criteria fired and why. Computed by the pure-function mmdwg_evaluator.evaluate_mmdwg_criteria. Fields mirror MmdwgEvaluationResult fields used by the frontend.
    - `has_curated_flags` object, required: 10 keys (ps2, ps3, ps4, pm6, pp1, pp4, bs2, bs3, bs4, bp5) -> bool. PP1 may be False even when populated if disqualifier (homoplasmic_in_all=TRUE) fires.
    - `strength_enums` object, required: 5 keys (ps2, pm6, bs2, ps4, pp1) -> derived strength string or None. ps4/pp1 strengths are inline-derived from counts.
    - `pp1_disqualified` boolean, required: TRUE when PP1 evidence populated AND homoplasmic_in_all=TRUE. Triggers Cat M7a audit message.
    - `curated_contributed` boolean, required: TRUE when at least one of the 10 has_curated flags is TRUE
    - `emitted_curated_criteria` string[], required: Ordered list of criterion codes (e.g. 'PS3_Supporting', 'PP1_Moderate') emitted by curated evidence. Tier-suffix convention: bare = ACMG default per Richards 2015; explicit suffix = strength differs from default OR McCormick downgrade (PS3, BS3 always _Supporting).
  - `effective_classification` EffectiveClassificationResponse, required: Pipeline-original vs evaluator-overlay classification. Per addendum B2: evaluator_acmg_class is Optional[str] = None in c3a. Combining rules (Richards 2015) extraction is deferred to future B3 Spike CR. Frontend renders 'Real classification updates after reclassify' when evaluator_acmg_class is None.
    - `pipeline_acmg_class` string, required: Pipeline-original ACMG class from raw_variants
    - `pipeline_criteria` string, required: Pipeline-original ACMG criteria string
    - `evaluator_acmg_class` string, nullable: Evaluator-derived effective ACMG class. None in c3a (combining rules not extracted). Future B3 Spike CR will populate this field.
    - `evaluator_criteria` string, required: Pipeline criteria + curated subset (computed via evaluator). Comma-joined.
    - `cat_m_messages` string[]: ClinGen MMDWG Category M audit messages (M7a/M7b). M7a fires on PP1 disqualifier; M7b fires when curation contributes any criterion.
  - `curated_by` UserAttribution: Identifies a user who performed an action, with optional timestamp. Used in flag/override responses and annotation records. Both user_id and user_name are required — user_id for system references, user_name for display. timestamp optional because some historical records (migrated from DuckDB) lack precise timestamps.
    - `user_id` string, uuid, nullable: User UUID. May be None for historical records migrated from DuckDB where original user was not tracked.
    - `user_name` string, required: Display name of the user. For historical records, may be 'system:historical-migration' or 'unknown-historical'.
    - `timestamp` string, date-time, nullable: When the action occurred. None for historical records without precise timestamp.
  - `audit_event_id` string, uuid, nullable: Audit event UUID emitted on this write. None for GET responses (no audit emission on read paths).
  - `validation_warnings` string[]: Non-blocking advisory warnings emitted during save. Curator may proceed regardless; warnings are logged in audit trail. HET-001: PP1 homoplasmy reminder fires when proband heteroplasmy >= 0.95 and homoplasmic_in_all=FALSE. GET, DELETE, and preview endpoints always return an empty list.

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/helena/apis/helix-insight-variant-analysis-service.md) · [All operations](https://skmtc.dev/helena/apis/helix-insight-variant-analysis-service/llms.txt) · [OpenAPI document](https://skmtc.dev/helena/apis/helix-insight-variant-analysis-service/revisions/fe51fd20cdf1?raw)
