> Portal Navigation:
> 
> - Append `.md` to any URL under `https://dev.wix.com/docs/` to get its markdown version.
> - Pages are either content pages (article or reference text) or menu pages (a list of links to child pages).
> - To get a menu page, truncate any URL to a parent path and append `.md` (e.g. `https://dev.wix.com/docs/sdk.md`, `https://dev.wix.com/docs/sdk/core-modules.md`).
> - Top-level index of all portals: https://dev.wix.com/docs/llms.txt
> - Full concatenated docs: https://dev.wix.com/docs/llms-full.txt

# GetTranslationJobStatus

# Package: machineTranslation

# Namespace: AsyncSiteTranslator

# Method link: https://dev.wix.com/docs/api-reference/business-management/multilingual/machine-translation/async-site-translator/get-translation-job-status.md

## Permission Scopes:
Wix Multilingual: SCOPE.MULTILINGUAL.MANAGE_TRANSLATIONS

## Introduction

Retrieves a translation job's current state, including how much content it has processed and
which fields failed.

Poll this method until `jobState` is `COMPLETED` or `FAILED`. There's no published limit on how
long a job takes. A job stays queryable indefinitely, so you can check its outcome long after it
finishes.

---

## REST API

### Schema

```
 Method: getTranslationJobStatus
 Description: Retrieves a translation job's current state, including how much content it has processed and which fields failed.  Poll this method until `jobState` is `COMPLETED` or `FAILED`. There's no published limit on how long a job takes. A job stays queryable indefinitely, so you can check its outcome long after it finishes.
 URL: https://www.wixapis.com/multilingual/v3/async-site-translator/translate/status/{jobId}
 Method: GET
 # Note: If the parameter `a.b` is listed under required parameters, `b` is only required if `a` is also present.
 Required parameters:  jobId
 Method parameters: 
   param name: jobId | type:   none | required: true 
 Return type: GetTranslationJobStatusResponse
  - name: jobId | type: string | description: Translation job GUID.  | validation: format GUID
  - name: jobState | type: JobState | description: Current state of the translation job.  
     - enum:
     -     PENDING: The job is accepted and waiting to start.
     -     RUNNING: The job is translating content.
     -     COMPLETED: The job finished. Check `failedFields`, because a completed job can still have individual field failures.
     -     FAILED: The job stopped before finishing. Content translated before it stopped is kept.
  - name: totalFieldsCount | type: integer | description: Number of fields the job has processed so far, successes and failures combined. While the job is running this tracks progress rather than the job's full scope, and it reflects the total number of fields translated only once `jobState` is `COMPLETED`.  
  - name: translatedFieldsCount | type: integer | description: Number of fields the job has successfully translated.  
  - name: failedFields | type: array<FieldTranslationFailure> | description: Fields that failed to translate, with error details for each.  Limited to 2000 entries. Compare the length of this list with `totalFailedFieldsCount` to check whether it was truncated.  | validation: maxItems 2000
     - name: fieldId | type: string | description: GUID of the field that failed to translate.  | validation: format GUID
     - name: contentId | type: string | description: GUID of the content item that contains the field. Identifies a content item in the Translation Content API.  | validation: format GUID
     - name: schemaId | type: string | description: GUID of the schema that defines the content item's structure. Identifies a schema in the Translation Schema API.  | validation: format GUID
     - name: failureReason | type: string | description: Description of why the field failed to translate.  | validation: maxLength 500
     - name: errorCode | type: string | description: Code identifying why the field failed to translate.  Supported values:  - `CONTENT_TOO_LONG`: The field's content exceeds the translation engine's length limit. - `MT_TRANSLATION_FAILED`, `AI_TRANSLATION_FAILED`: The translation engine couldn't translate the field. - `MT_RPC_FAILED`, `AI_RPC_FAILED`: The call to the translation engine failed. - `QUERY_FAILED`: The field's source content couldn't be retrieved. - `CONTENT_CREATE_FAILED`, `CONTENT_UPDATE_FAILED`, `UPDATE_RPC_FAILED`: The translation was produced, but couldn't be saved. - `NOT_IMPLEMENTED`: The field's type isn't supported for translation.  | validation: maxLength 100
  - name: totalFailedFieldsCount | type: integer | description: Number of fields that failed to translate.  
  - name: createdDate | type: string | description: Date and time the translation job was created.  | validation: format date-time
  - name: updatedDate | type: string | description: Date and time the translation job was updated. Once `jobState` is `COMPLETED` or `FAILED`, this is when the job finished.  | validation: format date-time

 Possible Errors:
   HTTP Code: 404 | Status Code: NOT_FOUND | Application Code: JOB_NOT_FOUND | Description: Couldn't find the translation job.


```

### Examples

### Get Translation Job Status Call Example
This example shows how to check the state of a completed site translation job.

```curl
curl -X GET 'https://www.wixapis.com/multilingual/v3/async-site-translator/translate/status/5b7c9e21-3f4a-4d18-9c2e-71ab6d0f8e34' \
     -H 'Authorization: <AUTH>'
```

---

## JavaScript SDK

### Schema

```
 Method: wixClientAdmin.multilingual.asyncSiteTranslator.getTranslationJobStatus(jobId)
 Description: Retrieves a translation job's current state, including how much content it has processed and which fields failed.  Poll this method until `jobState` is `COMPLETED` or `FAILED`. There's no published limit on how long a job takes. A job stays queryable indefinitely, so you can check its outcome long after it finishes.
 # Note: If the parameter `a.b` is listed under required parameters, `b` is only required if `a` is also present.
 Required parameters:  jobId
 Method parameters: 
   param name: jobId | type: string | description: Translation job GUID. | required: true | validation: format GUID
 Return type: PROMISE<GetTranslationJobStatusResponse>
  - name: jobId | type: string | description: Translation job GUID.  | validation: format GUID
  - name: jobState | type: JobState | description: Current state of the translation job.  
     - enum:
     -     PENDING: The job is accepted and waiting to start.
     -     RUNNING: The job is translating content.
     -     COMPLETED: The job finished. Check `failedFields`, because a completed job can still have individual field failures.
     -     FAILED: The job stopped before finishing. Content translated before it stopped is kept.
  - name: totalFieldsCount | type: integer | description: Number of fields the job has processed so far, successes and failures combined. While the job is running this tracks progress rather than the job's full scope, and it reflects the total number of fields translated only once `jobState` is `COMPLETED`.  
  - name: translatedFieldsCount | type: integer | description: Number of fields the job has successfully translated.  
  - name: failedFields | type: array<FieldTranslationFailure> | description: Fields that failed to translate, with error details for each.  Limited to 2000 entries. Compare the length of this list with `totalFailedFieldsCount` to check whether it was truncated.  | validation: maxItems 2000
     - name: fieldId | type: string | description: GUID of the field that failed to translate.  | validation: format GUID
     - name: contentId | type: string | description: GUID of the content item that contains the field. Identifies a content item in the Translation Content API.  | validation: format GUID
     - name: schemaId | type: string | description: GUID of the schema that defines the content item's structure. Identifies a schema in the Translation Schema API.  | validation: format GUID
     - name: failureReason | type: string | description: Description of why the field failed to translate.  | validation: maxLength 500
     - name: errorCode | type: string | description: Code identifying why the field failed to translate.  Supported values:  - `CONTENT_TOO_LONG`: The field's content exceeds the translation engine's length limit. - `MT_TRANSLATION_FAILED`, `AI_TRANSLATION_FAILED`: The translation engine couldn't translate the field. - `MT_RPC_FAILED`, `AI_RPC_FAILED`: The call to the translation engine failed. - `QUERY_FAILED`: The field's source content couldn't be retrieved. - `CONTENT_CREATE_FAILED`, `CONTENT_UPDATE_FAILED`, `UPDATE_RPC_FAILED`: The translation was produced, but couldn't be saved. - `NOT_IMPLEMENTED`: The field's type isn't supported for translation.  | validation: maxLength 100
  - name: totalFailedFieldsCount | type: integer | description: Number of fields that failed to translate.  
  - name: _createdDate | type: Date | description: Date and time the translation job was created.  
  - name: _updatedDate | type: Date | description: Date and time the translation job was updated. Once `jobState` is `COMPLETED` or `FAILED`, this is when the job finished.  

 Possible Errors:
   HTTP Code: 404 | Status Code: NOT_FOUND | Application Code: JOB_NOT_FOUND | Description: Couldn't find the translation job.


```

### Examples

### Get a translation job's status
Use the job ID returned by translateSite. Poll until jobState is COMPLETED or FAILED, and check failedFields for individual field failures.

```javascript
import { asyncSiteTranslator } from "@wix/multilingual";

async function getTranslationJobStatus() {
  const response = await asyncSiteTranslator.getTranslationJobStatus(
    "243de60c-110f-4e29-803d-132042d45473",
  );
}

/* Promise resolves to:
 * {
 *   "jobId": "243de60c-110f-4e29-803d-132042d45473",
 *   "jobState": "COMPLETED",
 *   "totalFieldsCount": 1097,
 *   "translatedFieldsCount": 1097,
 *   "failedFields": [],
 *   "totalFailedFieldsCount": 0,
 *   "_createdDate": "2026-09-22T09:22:48.519Z",
 *   "_updatedDate": "2026-09-22T09:22:57.301Z"
 * }
 */

```

### getTranslationJobStatus (self-hosted)
Self-hosted SDK calls require you to [create a client](https://dev.wix.com/docs/sdk/articles/work-with-the-sdk/about-the-wix-client.md).

```javascript
import { createClient } from '@wix/sdk';
import { asyncSiteTranslator } from '@wix/multilingual';
// Import the auth strategy for the relevant access type
// Import the relevant host module if needed

const myWixClient = createClient ({
  modules: { asyncSiteTranslator },
  // Include the auth strategy and host as relevant
});


async function getTranslationJobStatus(jobId) {
  const response = await myWixClient.asyncSiteTranslator.getTranslationJobStatus(jobId);
};
```

---