---
title: "Get Translation"
method: GET
path: "/projects/{projectId}/translations/{translationId}"
tags: ["String/Asset Translations"]
---

# Get Translation

`GET /projects/{projectId}/translations/{translationId}`

## Request

- Base URL: `https://api.crowdin.com/api/v2`
- URL: `https://api.crowdin.com/api/v2/projects/{projectId}/translations/{translationId}`
- Auth: none declared
- TypeScript: <https://skmtc.dev/crowdin/apis/crowdin-enterprise-api-v2/docs/projects/:projectId/translations/:translationId/get.ts> (a function with typed inputs; its response is checked against the schema)

**Required scopes:** `project.translation` (Read only).

## Path parameters

- `projectId` integer, required
- `translationId` integer, required

## Query parameters

- `denormalizePlaceholders` 0 | 1

## Response `200`

Translation data

- EnterpriseTranslationResource: Base schema of resource container. Container is a wrapper object that contains payload in required `data` property and provides space for adding any other metadata.
  - `data` union, required
    - EnterpriseStringTranslation
      - `id` integer: Translation Identifier
      - `user` object: User
        - `id` integer
        - `username` string
        - `fullName` string
        - `avatarUrl` string
      - `rating` integer: Translation Rating (Votes)
      - `createdAt` string, date-time
      - `provider` 'tm' | 'google' | 'microsoft' | 'crowdin' | 'deepl' | 'amazon' | 'watson' | 'global_tm' | 'google_automl' | 'modernmt' | 'custom_mt' | 'ai', nullable: Translation Provider. `null` when the translation was added manually
      - `providerId` integer, nullable: Provider specific identifier: a TM for `tm`, an AI Prompt for `ai`, an MT engine for machine translation providers. `null` when the translation was added manually or without a specific provider entity
      - `isPreTranslated` boolean: If `true`, the translation was added by Auto-Translation
      - `matchRate` integer, nullable: Translation Memory match rate in percent (40–100) recorded when the translation was added — set for manually added translations too. `null` when no TM match was available
      - `matchType` 'perfect' | 'exact' | 'fuzzy', nullable: Translation Memory match type. One of: `perfect` (text and context match), `exact` (text match only), `fuzzy` (partial match). `null` when no TM match was available
      - `text` string: Translation text
      - `pluralCategoryName` string, nullable: plural category name
      - `workflowStepId` integer: Workflow Step Identifier
    - EnterpriseAssetTranslation
      - `id` integer: Translation Identifier
      - `user` object: User
        - `id` integer
        - `username` string
        - `fullName` string
        - `avatarUrl` string
      - `rating` integer: Translation Rating (Votes)
      - `createdAt` string, date-time
      - `url` string: Asset URL
      - `workflowStepId` integer: Workflow Step Identifier

## Other responses

- `401`: Unauthorized
- `403`: Forbidden
- `404`: Project or translation with specified id was not found
- `405`: Method Not Allowed
- `503`: Service Unavailable

## Changes

- **2026-11-09** `6d2d771cdf67`: 2 breaking
  - the response property `allOf[subschema #2]/data/oneOf[subschema #1: Enterprise String Translation]/allOf[subschema #1: String Translation]/allOf[subschema #4]/pluralCategoryName` became nullable for the status `200`
  - the response property `allOf[subschema #2]/data/oneOf[subschema #1: Enterprise String Translation]/allOf[subschema #2: String Translation]/allOf[subschema #4]/pluralCategoryName` became nullable for the status `200`
- …earlier changes not shown

[Operation history](https://skmtc.dev/crowdin/apis/crowdin-enterprise-api-v2/changes/projects/:projectId/translations/:translationId/get.md)

---

[API](https://skmtc.dev/crowdin/apis/crowdin-enterprise-api-v2.md) - [All operations](https://skmtc.dev/crowdin/apis/crowdin-enterprise-api-v2/llms.txt) - [OpenAPI document](https://skmtc.dev/crowdin/apis/crowdin-enterprise-api-v2/revisions/6d2d771cdf67?raw)
