> ## Documentation Index
> Fetch the complete documentation index at: https://developers.phrase.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Changelog

> Stay up to date with the latest changes to Phrase APIs, SDKs, and developer tools.

For full product release notes, see the [Phrase Help Center](https://support.phrase.com/hc/en-us/categories/4930539748124-Release-notes).

<Update label="July 20, 2026" tags={["Style Guides", "API", "Update"]}>
  ## Style Guide API: active-rule and AI-check limits per Content Group and Language

  Each (Content Group, Language) pair now allows at most **50 active rules** and **20 active rules with AI check
  enabled**. Rules are counted whether linked directly to a Content Group/Language or via
  `allContentGroups`/`allLanguages`.

  * Explicitly requesting `active: true` or `aiCheckEnabled: true` when a pair is already at its limit is rejected
    with `409 Conflict` (`ACTIVE_RULE_LIMIT_REACHED` / `AI_CHECK_LIMIT_REACHED`).
  * When these flags are omitted, the API now decides them automatically based on remaining room, instead of
    always defaulting to `true`.
  * Style Guide rule extraction respects the same limits: extracted rules beyond the remaining room are saved but
    left inactive, without affecting rules already active for that Content Group and Language.

  See [Limits](/en/api/style-guides/concepts#limits) in the Style Guide API reference.
</Update>

<Update label="July 10, 2026" tags={["Studio", "API", "Update"]}>
  ## Studio API: AI model value `quokka` is now `aita`

  The AI model name enums for the [Update project settings](/en/api/studio/projects/update-project-settings) endpoint (`chatModelName`, `insightsModelName`, and `translationModelName`) previously exposed the internal codename `quokka`. The AI Translation Agent is now selected with the value `aita` — a meaningful external name in line with the other options (`plai`, `gpt-5-mini`, `gpt-4o-mini`).

  * Use `aita` when setting one of these fields to the AI Translation Agent.
  * The old `quokka` value is still accepted for backward compatibility, but is no longer documented and may be removed in a future release.

  See the [Studio API reference](/en/api/studio/introduction).
</Update>

<Update label="July 8, 2026" tags={["Content Groups", "API", "New feature"]}>
  ## Content Groups API now available

  The [Content Groups API](/en/api/control-hub/introduction) is now documented in the Developer Hub.

  Use it to manage **content groups** — organization-scoped collections that link platform objects such as projects, style guides, style rules, and AI quality checks together for coordinated workflows.
</Update>

<Update label="July 3, 2026" tags={["Strings", "API", "New feature"]}>
  ## Strings API: job automations can target multiple projects

  Job automations previously accepted `project_ids` as an array but used only the first entry. You can now associate a job automation with **multiple projects** in a single call. Multi-project automations require the `advanced_job_automation` plan feature — accounts without it receive a `422` with `project_ids` in the error field.

  See the [Strings API reference](/en/api/strings/introduction).
</Update>

<Update label="July 2, 2026" tags={["Studio", "API", "Update"]}>
  ## Studio API: clarified subtitle updates — `words` is the source of truth

  The Update/Get Subtitle reference now spells out that a segment's `words` array (word-level text and timings) is authoritative for both subtitle rendering and dubbing text-to-speech. The `text` field is only a human-readable mirror and is ignored when rendering or synthesizing.

  * To change what a segment says (for example, shortening a dubbing line before a redub), edit its `words` — not just `text`.
  * Never submit a segment with an empty `words` array: it is silently dropped the next time the track is read, and produces no dubbing audio. This is the usual cause of a track that "comes back empty" after an update.
  * The endpoint is a bulk replace: always send the full segment list, then list changed ids in `segmentsToRedub` to regenerate their audio.

  See the [Studio API reference](/en/api/studio/introduction).
</Update>

<Update label="July 2, 2026" tags={["Quality Evaluator", "API", "Deprecation"]}>
  ## Quality Evaluator API: v1 CRUD and v2 endpoints deprecated

  All v1 AI Check CRUD endpoints (`GET/POST /v1/aiChecks`, `GET/PUT/DELETE /v1/aiChecks/{uid}`), v1 Quality Profile CRUD endpoints, `PUT /v2/aiChecks/{uid}`, and `POST /v2/evaluation` are now flagged as **deprecated** in the OpenAPI spec. Migrate to the v3 Content Group–based endpoints:

  * `POST /v3/evaluation` for evaluating segments.
  * `GET /v3/qualityProfiles/{contentGroupId}` for resolving a Quality Profile from a Content Group.

  The deprecated endpoints continue to work for now. See the [Quality Evaluator API reference](/en/api/quality-evaluator/introduction).
</Update>

<Update label="July 1, 2026" tags={["Strings", "API", "New feature"]}>
  ## Strings API: link and unlink keys with content strategies

  The Key Links endpoints now cover the full lifecycle of shared translations between a parent key and its children:

  * **Link child keys** — designate a parent and attach one or more children so their translations derive from the parent.
  * **List child keys** — retrieve the full link record for a parent, including all attached children.
  * **Unlink a single child** — detach one child; its translations inherit the parent's current content and are marked unverified for reviewer confirmation.
  * **Batch unlink** — detach several children in one request, or dissolve the entire group with `unlink_parent: true`.
  * **Content strategy on unlink** — choose `keep_content` (default; copies the parent's translations into each detached child) or `remove_content` (clears them).

  Key Links are available on main projects only. See the [Strings API reference](/en/api/strings/introduction).
</Update>

<Update label="July 1, 2026" tags={["Strings", "API", "Update"]}>
  ## Strings API: document list search is now a prefix match

  The `q` parameter on **List documents** now performs a case-insensitive **prefix** match on the document name instead of a substring match. For example, `q=invoice` returns documents whose names *start* with "invoice", not those that merely contain it. If you relied on the previous substring behavior, adjust your queries accordingly.

  The **Delete document**, **Get screenshot**, and **Delete screenshot** endpoints also received clearer descriptions and error contracts. See the [Strings API reference](/en/api/strings/introduction).
</Update>

<Update label="June 25, 2026" tags={["Strings", "API", "New feature"]}>
  ## Strings API: assign a Language AI profile per locale

  Locales now accept an optional `language_ai_profile` identifier when you create or update a locale. The selected profile drives Language AI behavior for that locale, and the assigned profile is returned on the locale resource.

  See the [Strings API reference](/en/api/strings/introduction).
</Update>

<Update label="June 25, 2026" tags={["Strings", "API", "Update"]}>
  ## Strings API: prefix-based locale downloads

  Locale download requests now accept two related options in the request body:

  * **`translation_key_prefix`** — strip the given prefix from key names in the exported file.
  * **`filter_by_prefix`** — when `true`, only export keys that match `translation_key_prefix`, and remove the prefix from the output.

  Use these to export a subset of keys with cleaner names. Note: stripping a prefix can produce duplicate key names if other keys collide once the prefix is removed.

  See the [Strings API reference](/en/api/strings/introduction).
</Update>

<Update label="June 23, 2026" tags={["Connectors", "API", "New feature"]}>
  ## Connectors API: full reference for all seven connectors

  The Connectors API reference now documents every supported connector end-to-end, not just Contentful. Available connectors:

  * **Files** — sync localizable files from arbitrary file sources.
  * **GitHub** — connect repositories to TMS projects.
  * **Braze** — pull content blocks and email templates for translation.
  * **Contentful** — sync entries and assets.
  * **Google Drive** — translate documents stored in Drive.
  * **Tridion Docs** — exchange content with Tridion Docs.
  * **Optimizely** — localize Optimizely content.

  Each connector exposes the same request/response contract, so you can build custom flows against a consistent interface. See the [Connectors API reference](/en/api/connectors/introduction).
</Update>

<Update label="June 23, 2026" tags={["Strings", "API", "New feature"]}>
  ## Strings API: review due dates on jobs

  Job responses now include a `review_due_date` field so you can see when a job's review stage is due. The field returns `null` when the project does not have the review workflow enabled.

  See the [Strings API reference](/en/api/strings/introduction).
</Update>

<Update label="June 23, 2026" tags={["Strings", "API", "Update"]}>
  ## Strings API: branch comparison response schema

  The branch comparison endpoint now returns a fully described response. For each resource type (translation keys, translations, locales, tags), the response lists changes made on the base branch, changes made on the feature branch, and any conflicts — making it easier to surface branch diffs and resolve merges programmatically.

  See the [Strings API reference](/en/api/strings/introduction).
</Update>

<Update label="June 19, 2026" tags={["Quality Evaluator", "API", "New feature"]}>
  ## Quality Evaluator API v3: Content Group–based evaluation

  Quality Evaluator now resolves AI Checks and Quality Profiles dynamically from Content Groups, so a single call applies the right checks for the target content:

  * **Evaluate against a Content Group** — `POST /v3/evaluation` evaluates segments using the AI Checks resolved from the supplied `contentGroupId`. When no checks are associated, segments are returned with an empty `results` array instead of an error.
  * **Resolve a Quality Profile** — `GET /v3/qualityProfiles/{contentGroupId}` returns the Quality Profile resolved for a Content Group.
  * **Restrict AI Checks to specific locales** — `PUT /v2/aiChecks/{uid}` accepts an optional `locales` field so a check can be limited to certain target locales. Omit the field to preserve existing restrictions, or send an empty array to clear them.

  The previous AI Check CRUD endpoints (`/v1/aiChecks*`), Quality Profile CRUD endpoints (`/v1/qualityProfiles*`), and `POST /v2/evaluation` are now deprecated. Migrate to the v3 Content Group–based endpoints. See the [Quality Evaluator API introduction](/en/api/quality-evaluator/introduction).
</Update>

<Update label="June 19, 2026" tags={["Strings", "API", "New feature"]}>
  ## Strings API: name your repo syncs

  Repo syncs now support an optional `name` field (up to 100 characters) so you can give each sync a custom display name. When the name is null or blank, the sync continues to display using its associated project name. Set `name` when creating or updating a repo sync to make repository connections easier to identify in lists and dashboards.

  See the [Strings API reference](/en/api/strings/introduction).
</Update>

<Update label="June 16, 2026" tags={["Studio", "API", "New feature"]}>
  ## Studio API: update projects and manage recording subtitles

  Three new endpoints expand what you can do with the Studio API:

  * **Update project settings** — `PATCH /v1/projects/{id}` partially updates AI model preferences, TTS provider, translation memory / MT profile assignment, and sharing visibility. Only the fields you send are changed.
  * **Get recording subtitles** — `GET /v1/projects/{projectId}/recordings/{recordingId}/subtitles` returns the segmented subtitle for a recording.
  * **Update recording subtitles** — `PUT /v1/projects/{projectId}/recordings/{recordingId}/subtitles` writes subtitle segments back to a recording.

  See the [Studio API reference](/en/api/studio/introduction).
</Update>

<Update label="June 15, 2026" tags={["TMS", "API", "New feature"]}>
  ## TMS API: link projects to content groups

  Three new TMS endpoints let you manage a project's content group association:

  * `GET /api2/v1/projects/{projectUid}/contentGroup` — get the content group linked to a project.
  * `POST /api2/v1/projects/{projectUid}/contentGroup` — link a project to a content group.
  * `DELETE /api2/v1/projects/{projectUid}/contentGroup` — unlink a project from its content group.

  See the [TMS API reference](/en/api/tms/latest/introduction).
</Update>

<Update label="June 15, 2026" tags={["TMS", "Quality Evaluator", "Update"]}>
  ## TMS: quality evaluation moved under projects, plus segment warnings storage

  The endpoint that triggers AI quality evaluation has moved to a project-scoped path:

  * **New:** `POST /api2/v1/projects/{projectUid}/jobs/evaluateQuality`
  * **Replaces:** `POST /api2/v1/qualityProfiles/evaluate`

  A new `POST /api2/v1/qualityProfiles/segmentWarnings` endpoint also lets you store evaluation warnings for a job part. Update any integrations that called the previous endpoint. See the [TMS API reference](/en/api/tms/latest/introduction).
</Update>

<Update label="June 11, 2026" tags={["Strings", "API", "Update"]}>
  ## Strings API: larger upload size for unmentioned-key reporting

  When you upload translations, the response field that counts keys not mentioned in the upload is now calculated for uploads up to **100,000 keys** (previously 10,000). Larger uploads still report `0`.

  See the [Strings API reference](/en/api/strings/introduction).
</Update>

<Update label="June 9, 2026" tags={["Platform", "SCIM", "API"]}>
  ## SCIM endpoints moved to the Platform API

  SCIM user provisioning is now part of the Phrase Platform API at `/scim/...` (for example, `GET /scim/Users`, `POST /scim/Users`, `GET /scim/ServiceProviderConfig`). The previous `/api2/v1/scim/...` paths under TMS have been removed.

  Point your SCIM identity provider at the Platform endpoints. See the [Platform API reference](/en/api/platform/introduction).
</Update>

<Update label="June 9, 2026" tags={["Strings", "API", "New feature"]}>
  ## Strings API: fall back to another locale for unverified translations

  Locale download endpoints accept a new optional query parameter, `fallback_for_unverified_translations`. When `true`, translations in a non-final state are replaced by the fallback locale's translation at export time:

  * In the **simple** workflow, "non-final" means `unverified`.
  * In the **review** workflow, it also includes `translated` (awaiting review).

  No stored translations are modified. Requires `fallback_locale_id` or `use_locale_fallback` to be set. See the [Strings API reference](/en/api/strings/introduction).
</Update>

<Update label="June 5, 2026" tags={["Strings", "API", "Update"]}>
  ## Strings API: Identify how jobs were created

  Job responses in the Strings API now include two new fields so you can see where a job came from:

  * **`automation_id`** — the ID of the automation that created the job, or `null` if it was created manually
  * **`job_template_id`** — the ID of the job template the job was created from, or `null` if no template was used

  See the [Strings API reference](/en/api/strings/introduction) for the updated schema.
</Update>

<Update label="May 26, 2026" tags={["MCP Server", "Strings", "New feature"]}>
  ## MCP Server v0.10.0: Strings Repo Sync

  The Phrase MCP Server `v0.10.0` adds Repo Sync tools for Strings, so you can manage repository synchronization between Strings projects and Git repositories directly from your MCP client.

  See the [MCP Server guide](/en/guides/mcp) for full details.
</Update>

<Update label="May 22, 2026" tags={["TMS", "New feature"]}>
  ## TMS: Quality estimation warnings and translation memory alignment

  Two new TMS API endpoints are available:

  * **Quality estimation warnings** — `POST /api2/v1/qualityProfiles/qeWarnings` returns AI-generated QE warnings for selected job parts, paginated by segment.
  * **Translation memory alignment** — `POST /api2/v2/transMemories/{transMemoryUid}/align` aligns supplied source and target files using the TM's source locale and returns an aligned XLSX file.

  See the [TMS API reference](/en/api/tms/latest/introduction) for details.
</Update>

<Update label="May 22, 2026" tags={["TMS", "Quality Evaluator", "Update"]}>
  ## Quality evaluation: lock and confirm passing segments

  The TMS endpoint that triggers AI quality evaluation accepts two new optional parameters:

  * `lockSegments` (default `true`) — locks segments that pass all AI checks.
  * `confirmSegments` (default `false`) — confirms segments that pass all AI checks.

  Use these to automate post-evaluation segment status changes. See the [TMS API reference](/en/api/tms/latest/introduction).
</Update>

<Update label="May 21, 2026" tags={["Style Guides", "New API"]}>
  ## Style Guides API

  The Style Guide API is now public. Manage organization-wide writing guidelines through the API: create and update Markdown style guides per language, version every revision, search and filter, and bulk-delete.

  See the [Style Guides API Reference](/en/api/style-guides/introduction) to get started.
</Update>

<Update label="May 15, 2026" tags={["MCP Server", "TMS", "New feature"]}>
  ## MCP Server v0.9.0: Analysis and Quotes for TMS

  The Phrase MCP Server `v0.9.0` now supports the TMS Analysis and Quotes APIs. New tools let you create and manage analyses and quotes directly from your MCP client.

  See the [MCP Server guide](/en/guides/mcp) for full details.
</Update>

<Update label="May 14, 2026" tags={["MCP Server", "Strings", "New feature"]}>
  ## MCP Server v0.8.0: Strings screenshots

  The Phrase MCP Server `v0.8.0` adds screenshot support for Strings with new `create_screenshot` and `create_screenshot_marker` tools, so you can attach visual context to keys directly from your MCP client.

  See the [MCP Server guide](/en/guides/mcp) for full details.
</Update>

<Update label="May 8, 2026" tags={["MCP Server", "New feature"]}>
  ## MCP Server v0.7.0: Google Drive connector, Quality Evaluator, and base64 uploads

  The Phrase MCP Server `v0.7.0` adds several new capabilities:

  * **Google Drive connector** — manage Google Drive connector resources from the MCP Server
  * **Quality Evaluator** — evaluate translation quality through new Quality Evaluator tools
  * **Base64 file uploads** — file upload tools now accept base64-encoded `file_content` as an alternative to `file_path`

  See the [MCP Server guide](/en/guides/mcp) for full details.
</Update>

<Update label="May 4, 2026" tags={["Quality Evaluator", "API"]}>
  ## Quality Evaluator API

  The new Quality Evaluator API enables automated, AI-powered assessment of translation quality. Define quality requirements in natural language, group them into reusable profiles, and evaluate translation segments at scale.

  * **AI Checks** — create custom checks from natural language quality requirements
  * **Quality Profiles** — group AI Checks into reusable profiles
  * **Analytics** — track evaluation metrics and AI unit consumption over time

  See the [Quality Evaluator API introduction](/en/api/quality-evaluator/introduction) to get started.
</Update>

<Update label="April 27, 2026" tags={["MCP Server", "TMS", "New feature"]}>
  ## MCP Server: Termbase and Translation Memory management

  The Phrase MCP Server now supports managing Termbases and Translation Memories in TMS. New tools are available for:

  * **Termbases** — list, get details, search, import, and export
  * **Translation Memories** — list, get details, search, import, and export

  These tools are available as part of the TMS product in the MCP Server. See the [MCP Server guide](/en/guides/mcp) for full details.
</Update>

<Update label="April 24, 2026" tags={["MCP Server", "Breaking change"]}>
  ## MCP Server package renamed

  The Phrase MCP Server npm package has been renamed and is now published under the `@phrase` organization.

  **Before:**

  ```json theme={null}
  "args": ["-y", "phrase-mcp-server"]
  ```

  **After:**

  ```json theme={null}
  "args": ["-y", "@phrase/phrase-mcp-server"]
  ```

  Update your MCP client configuration to use the new package name. The old `phrase-mcp-server` package is no longer maintained.

  See the [MCP Server quick start](/en/guides/mcp) for full configuration examples.
</Update>
