---
title: "List Untranslated Keys"
method: GET
path: "/v1/mcp/projects/{project_id}/untranslated-keys"
tags: ["mcp"]
---

# List Untranslated Keys

`GET /v1/mcp/projects/{project_id}/untranslated-keys`

## Request

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

Return keys that DON'T yet have a valid translation in `language_code`.

A key is considered "untranslated" in the target language when ANY of:
  - no translation row exists for (key, language) at all
  - row exists but `value` is empty
  - row exists but `status == "missing"`

Keys whose SOURCE-language value is empty/absent are EXCLUDED by default
(reported separately as `source_missing`) — they are a source-data gap, not
an untranslated target. Pass include_source_missing=true to include them.

The response is intentionally compact (no `translations[]` array) so
Claude can scan a long list and propose translations for each entry
using `source_value` as the input.

## Path parameters

- `project_id` string, required

## Query parameters

- `language_code` string, required: Required: BCP-47 target language code (e.g. fr).
- `namespace` string, nullable: Filter by namespace slug
- `cursor` string, nullable
- `limit` integer
- `include_glossary_hints` boolean: Attach per-key glossary_hints[]: glossary rules matched in the source string.
- `include_source_missing` boolean: By default keys whose SOURCE value is empty/absent are EXCLUDED (untranslated requires a source to translate). Set true to include them; their count is always reported as `source_missing`.

## Response `200`

Successful Response

- UntranslatedKeysPage
  - `items` UntranslatedKey[], required
    - `key_uuid` string, required
    - `key_name` string, required
    - `namespace_slug` string, required
    - `namespace_uuid` string, required
    - `source_value` string, nullable, required
    - `plurals` boolean, required
    - `max_length` integer, nullable, required
    - `type` string
    - `glossary_hints` GlossaryHint[], nullable
      - `term` string, required
      - `rule_type` 'translation' | 'do_not_translate' | 'forbidden', required
      - `target_translation` string, nullable
      - `matched_text` string, required
  - `cursor_next` string, nullable, required
  - `total` integer, required
  - `source_missing` integer

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