---
title: "Mcp Source Health"
method: GET
path: "/v1/mcp/projects/{project_id}/source-health"
tags: ["mcp"]
---

# Mcp Source Health

`GET /v1/mcp/projects/{project_id}/source-health`

## Request

- Base URL: `https://api.sonenta.dev`
- URL: `https://api.sonenta.dev/v1/mcp/projects/{project_id}/source-health`
- Auth: none declared

Source-health report (task 752): key==value, empty source, keys with no
translations, placeholder-parity mismatches, duplicate source values.
Duplicate groups carry a status (task 1114) — see /source-duplicates.

## Path parameters

- `project_id` string, required

## Query parameters

- `version_id` string, nullable
- `include_allowed` boolean

## Response `200`

Successful Response

- SourceHealthOut
  - `project_uuid` string, required
  - `version_uuid` string, nullable, required
  - `keys_scanned` integer, required
  - `total_issues` integer, required
  - `by_issue` object, required
  - `by_severity` object, required
  - `items` HealthItem[], required
    - `key_uuid` string, required
    - `key_name` string, required
    - `namespace_slug` string, required
    - `issue` string, required
    - `severity` string, required
    - `detail` string, required
    - `source_value` string, nullable
    - `status` string, nullable
    - `note` string, nullable
    - `placeholder_mismatch` PlaceholderMismatch
      - `source_value` string, required
      - `source_placeholders` string[], required
      - `languages` PlaceholderLangMismatch[], required
        - `language_code` string, required
        - `target_value` string
        - `present` string[]
        - `missing` string[], required
        - `extra` string[], required
    - `ai_diagnosis` string, nullable
    - `ai_proposed_plan` object, nullable
    - `ai_model` string, nullable
    - `ai_diagnosed_at` string, date-time, nullable
    - `ai_diagnosis_cached` boolean
  - `duplicates_neutral` integer
  - `duplicates_to_fix` integer
  - `duplicates_allowed` integer
  - `duplicates_resolved` integer
  - `resolved_duplicates` ResolvedDuplicate[]
    - `source_value` string, nullable
    - `survivor_outcome` string, nullable
    - `plan_recorded` boolean
    - `merge_plan` ResolvedMergePlan
      - `survivor_outcome` string, nullable
      - `clusters` ResolvedMergeCluster[]
        - `canonical_key_uuid` string, nullable
        - `canonical_key_name` string, nullable
        - `redundant_key_uuids` string[]
        - `redundant_key_names` string[]
        - `applied` boolean
    - `canonical_key_uuids` string[]
    - `canonical_key_names` string[]
    - `trashed_key_uuids` string[]
    - `trashed_key_names` string[]
    - `files_modified` FileModified[]
      - `path` string, required
      - `line` integer, nullable
      - `found_key` string, nullable
      - `replacement_key` string, nullable
      - `occurrences` integer, nullable
      - `key_name` string, nullable
    - `resolved_at` string, date-time, nullable
    - `resolved_by_user_uuid` string, nullable
    - `resolved_by_api_key_uuid` string, nullable
    - `note` string, nullable

## Other responses

- `422`: Validation Error

---

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