# Sign In to the Dashboard

Learn how to access the dashboard and sign in.

## **Sign up for an Account**

To create an account, use a web browser and the following URL:

{% hint style="info" %}

```
https://id.marshub.com/register
```

{% endhint %}

<figure><img src="https://3313755758-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FU8az0lQAv2WfjEgcyNBz%2Fuploads%2FX9e3wfcFn6u27YnQXjgH%2Fimage.png?alt=media&amp;token=036584c6-fc99-44ae-80b1-84a374f157aa" alt=""><figcaption></figcaption></figure>

### Log in to your marshub account and begin a QA task.

1. Open a browser (Chrome or Edge) and visit the homepage at [https://qa.marshub.com](https://qa.marshub.com/).
2. Click on \[Try for free] to go to the login page.
3. Simply enter your business **Email** and **Password**, then click \[Login].

<figure><img src="https://3313755758-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FU8az0lQAv2WfjEgcyNBz%2Fuploads%2FvYinalE4ToeEqmQqO40r%2Fimage.png?alt=media&amp;token=a1f9f531-fa24-4276-979f-4087c301b26b" alt=""><figcaption></figcaption></figure>


# The MarsQA Dashboard Explained

The MarsQA Dashboard is a user-friendly web page that provides convenient access to all the features of Mars QA. Here, you can seamlessly complete the entire QA process, from file upload to content checking.

## The Dashboard Navigation

When viewing your MarsQA dashboard, it's important to remember that you won't be able to see all of the options on the left side of the page.

{% hint style="info" %}
To view the detailed check items corresponding to it, simply click on the icon ![](https://3313755758-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FU8az0lQAv2WfjEgcyNBz%2Fuploads%2FdFliLhwwvKpfjVfafAQ2%2Fsetting.svg?alt=media\&token=2c202063-7fb1-44e4-b5ba-fb36b313a309).
{% endhint %}

For example, clicking the icon ![](https://3313755758-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FU8az0lQAv2WfjEgcyNBz%2Fuploads%2FvJkk9TDghT76xaGhWJ6Y%2Fsetting.svg?alt=media\&token=a1600dba-a992-4c31-bfbc-8d0a0bfae485)  after **Punctuation Mismatch** will display all available punctuation options.

<figure><img src="https://3313755758-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FU8az0lQAv2WfjEgcyNBz%2Fuploads%2FFOMROTiDIvjbnB8jaamq%2Fimage.png?alt=media&amp;token=aea29248-adcd-4d05-967b-ec4619a73d5e" alt=""><figcaption></figcaption></figure>

### Feedback

If you have any suggestions or questions, please use the "Feedback" option in the top right corner of the page to let us know. We will pay attention to your message and actively communicate with you.

<figure><img src="https://3313755758-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FU8az0lQAv2WfjEgcyNBz%2Fuploads%2FPR3AU4XW9etMheHkBfuC%2Fimage.png?alt=media&amp;token=05a4a667-f6ac-40fb-bb7f-3e54ff1bb30c" alt="" width="405"><figcaption></figcaption></figure>


# Working with QA Features

## Basic

### **Inconsistency in Target**

Inconsistency in Target refers to situations where multiple translation units (TUs) share the same source text but have different target texts. This can happen for various reasons, such as:

* **Multiple target languages:** The target language for a TU may be changed, resulting in different versions of the same content.
* **Different translators:** Different translators may interpret the source text differently, leading to variations in the target text.

### Inconsistency in Source

Inconsistency in Source refers to situations where multiple translation units (TUs) share the same target text but have different source texts. This can happen for various reasons, such as:

* **Multiple source texts:** The source text for a TU may be revised or updated, resulting in different versions of the same content.
* **Different translators:** Different translators may interpret the source text differently, leading to variations in the target text.

### Empty Translation

Untranslated segments are parts of a bilingual translation file that have not been translated and are simply empty.

### Target Same as Source

Target Same as Source refers to translation units where the translated text matches the source text, including tags, punctuation, and spaces.

## Standard

### Punctuation Mismatch

<figure><img src="https://3313755758-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FU8az0lQAv2WfjEgcyNBz%2Fuploads%2FDEKLa2jCFjlBf7tRZnOY%2Fimage.png?alt=media&amp;token=07b9bfd1-f806-401e-8576-e0b0891b092d" alt="" width="380"><figcaption></figcaption></figure>

* **Incorrect Punctuation**, Incorrect Punctuation, the use of punctuation marks may vary in the target language. It's important to use punctuation correctly when translating.
* **Multiple Punctuation**, the use of multiple punctuation marks in succession or close proximity within a sentence or phrase, including commas, periods, question marks, exclamation marks, and more.
* **Bracket Mismatch**, meaning that the parentheses do not match, is a common issue in translation. It occurs when the number or order of left and right parentheses is inconsistent, leading to grammar errors or confusion.
* **Punctuation Mismatch (Source -> Target)**\
  Make sure the punctuation in the translation matches the punctuation in the original text, such as:\
  \- Missing or extra commas\
  \- Incorrect use of quotation marks

### Tag Mismatch

Tags are like labels that can be added to text to make it look different or do different things, such as headings, paragraphs, hyperlinks, bold text, etc. When translating a text, it's important to make sure that the tags in the translation match the tags in the original text.

### URL Mismatch

Ensure that the URLs in the translation match the web addresses in the original text. Also, check if any URLs have been omitted from the translation.

<figure><img src="https://3313755758-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FU8az0lQAv2WfjEgcyNBz%2Fuploads%2FvUSoGGE8Ony6FTqBoSuR%2Fimage.png?alt=media&amp;token=a69e6a0d-0d6f-44f3-ac61-24942480605a" alt=""><figcaption></figcaption></figure>

### Camel Case Mismatch

Make sure that all the CamelCase words in the original text have a matching CamelCase word in the translation.

{% hint style="info" %}
CamelCase is a naming convention in which multiple words are combined without spaces, and each word (except the first one) begins with a capital letter.

Examples of CamelCase words include:

1. phoneNumber
2. blogPostTitle
3. studentGradeReport
   {% endhint %}

<figure><img src="https://3313755758-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FU8az0lQAv2WfjEgcyNBz%2Fuploads%2FEVIcmEe7CpzNDFdT9FUP%2Fimage.png?alt=media&amp;token=7e8a0023-3c78-4a36-b2cd-b08eb97a9728" alt=""><figcaption></figcaption></figure>

### All Uppercase Mismatch

Find UPPERCASE words in the source text without a match in the target text and UPPERCASE words in the target text without a match in the source text.

<figure><img src="https://3313755758-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FU8az0lQAv2WfjEgcyNBz%2Fuploads%2FIBOEJ5SKrYNZpr3HlwYE%2Fimage.png?alt=media&amp;token=a8f5d1ca-4b9b-4897-9b70-3920a55c7126" alt=""><figcaption></figcaption></figure>

### Alphanumeric Mismatch

This check ensures that alphanumeric characters are used consistently on the source and target side.

<figure><img src="https://3313755758-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FU8az0lQAv2WfjEgcyNBz%2Fuploads%2FiCzfxYOY6H2E0TM81uyb%2Fimage.png?alt=media&amp;token=388dc76a-b610-470a-b1a5-d6475f76e131" alt=""><figcaption></figcaption></figure>

### Numeric Mismatch

Find equivalent numbers to ensure consistency between the numbers on the source and target sides.

### Non-Arabic Numerals

This check verifies if there are any full-width digits in the translation text that are not represented in Chinese.

<figure><img src="https://3313755758-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FU8az0lQAv2WfjEgcyNBz%2Fuploads%2F0ywEUJNmjIm5hyMURyV2%2Fimage.png?alt=media&amp;token=2b2eb3b4-532e-4244-97aa-7fbf93a90d77" alt=""><figcaption></figcaption></figure>

### Variable/Placeholder Mismatch

In program code files (e.g., HTML, XML, PHP, PO), variables and placeholders play a critical role. The MarsQA option checks the consistency of variables and placeholders in the Translation Unit between the original and translated text to ensure that no elements are missing, which could otherwise lead to program execution errors.

**Edit your regex patterns in the Variable Regex**

In the Variable Options window, update the regex in the 'Variable Regex' field as needed. To save your changes, click the \[Close] button.

<figure><img src="https://3313755758-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FU8az0lQAv2WfjEgcyNBz%2Fuploads%2FCXXpLSzGSTn70xm3OmQG%2Fimage.png?alt=media&amp;token=9f1d5929-a250-4210-bf1e-b0245f226ae1" alt="" width="414"><figcaption></figcaption></figure>

### Key Term Mismatch

In MarsQA, you can designate specific words as Key Terms by entering them directly or importing CSV/Excel term files in the Glossary Options window.

<figure><img src="https://3313755758-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FU8az0lQAv2WfjEgcyNBz%2Fuploads%2FuXLHq54fC3wW0g95oaCy%2Fimage.png?alt=media&amp;token=430f9714-7fff-498e-b9e3-f41815044142" alt="" width="497"><figcaption></figcaption></figure>

### Spaces Check

Ensure correct usage of spaces, including multiple spaces, zero-width spaces, spaces near punctuation, and trailing spaces.

<figure><img src="https://3313755758-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FU8az0lQAv2WfjEgcyNBz%2Fuploads%2F1Grcb35r7TnRQwDKq8fc%2Fimage.png?alt=media&amp;token=f10f0081-e17d-41de-8edb-01d9ca7cd6cf" alt="" width="414"><figcaption></figcaption></figure>

{% hint style="info" %}
What are zero-width spaces?

Zero-width spaces are special characters that are invisible and do not take up any physical space on a page. They are used to indicate where line breaks can occur without inserting a visible space character. Zero-width spaces are often used in text processing, layout design, and typography to control word wrapping and formatting without altering the visible appearance of the text.
{% endhint %}

### Repeated Words

Check for duplicate words in the target. MarsQA detects and reports a warning when a word is repeated in the translation and separated by at least one space (e.g., "and and").

### Forbidden Words

Sometimes, you need to forbid a term. In this case, the term must not be used. MarsQA marks forbidden terms in the translation text when it finds a match.

<figure><img src="https://3313755758-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FU8az0lQAv2WfjEgcyNBz%2Fuploads%2FwSed4RXxi4TO23OoPuOQ%2Fimage.png?alt=media&amp;token=091fda8a-e9ec-49b4-8f33-30f14dc4b070" alt="" width="414"><figcaption></figcaption></figure>

### Translation not Confirmed

CAT tools are known to keep a status for each translation unit. If a translation unit is still in draft status, MarsQA will detect it and report it.

### Unedited Fuzzy Match

Check if there are fuzzy matches from translation memory that the translator didn't modify.

### SimpTrad Check

Enable this check to mark any simplified Chinese characters in the target text of uploaded bilingual files where the target language is Traditional Chinese, including Traditional Chinese (Taiwan) and Traditional Chinese (Hong Kong).

<figure><img src="https://3313755758-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FU8az0lQAv2WfjEgcyNBz%2Fuploads%2Fb8IjqLzrLi9q7Y0esAzl%2Fimage.png?alt=media&amp;token=889e272c-8a45-448d-b848-9f7172a2af7f" alt=""><figcaption></figcaption></figure>

## Advance

### AI Check

MarsQA offers AI checking features based on GPT to verify the meaning and accuracy of translations, as well as provide suggestions and explanations for potential issues.

Click ![](https://3313755758-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FU8az0lQAv2WfjEgcyNBz%2Fuploads%2FWgCgKS5zDm8Hef371rOl%2Fimage.png?alt=media\&token=684b7b54-ffd7-4df9-8996-7480217dc242) icon，to view the AI Options as shown in the image.\
\- **Model**，select the GPT model you need.\
\- **User Language**，choose the language for suggestion explanations; the default is the target language.

<figure><img src="https://3313755758-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FU8az0lQAv2WfjEgcyNBz%2Fuploads%2FfgzYeZ3owOyd2C6dteVP%2Fimage.png?alt=media&amp;token=bbeadd73-835e-4843-a4f3-301bfecbd8c5" alt=""><figcaption></figcaption></figure>

### Spell Check

MarsQA provides over 100 spell check dictionaries based on the Hunspell engine. It checks the spelling of all files being examined immediately, processes all files as one block, and then shows you the combined results so you can quickly identify real spelling errors.

<figure><img src="https://3313755758-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FU8az0lQAv2WfjEgcyNBz%2Fuploads%2Fc8LdjuWYIiMwvPPNSPFf%2Fimage.png?alt=media&amp;token=b54f021a-4468-4387-8038-6b111e88ee15" alt=""><figcaption></figcaption></figure>

### Semantic Check

"Semantic Check" is not enabled by default. When selected, it verifies whether the translation roughly aligns with the original meaning, but it does not evaluate the quality or grammatical accuracy of the translation.

Here's an example of a translation check for English-German.&#x20;

As shown in the figure, MarsQA uses solid green dots to represent how well the translation matches the original meaning.

<figure><img src="https://3313755758-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FU8az0lQAv2WfjEgcyNBz%2Fuploads%2F3pAVPhc3B82d52T8NHsa%2F%E4%BC%81%E4%B8%9A%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_17183537891157.png?alt=media&amp;token=22f00e2b-a2a5-433e-9724-bb6d98083fb4" alt=""><figcaption></figcaption></figure>

### Machine Translation Check

By leveraging a range of machine translation engines and AI techniques, MarsQA efficiently detects machine-translated content within all checked files.

<figure><img src="https://3313755758-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FU8az0lQAv2WfjEgcyNBz%2Fuploads%2FQr1R6jGAHI16y6yCcuHn%2Fimage.png?alt=media&amp;token=ff811d92-b660-4014-9c58-d27979c26379" alt="" width="416"><figcaption></figcaption></figure>

Before starting the check, make sure to complete the settings below, as shown in the above image:

1. Choose a machine translation engine.
2. Set a value to determine if a sentence might be machine-translated.
3. Set a percentage for randomly checking sentences in the document to be reviewed.

**Show diff** means whether to open the revision mode and display the differences between the human-translated text and the machine-translated text.

<figure><img src="https://3313755758-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FU8az0lQAv2WfjEgcyNBz%2Fuploads%2FXvOUZi3jfUTT42iNoq3F%2Fimage.png?alt=media&amp;token=282e2cd9-d231-4f3d-92ef-04004f9c6490" alt=""><figcaption></figcaption></figure>

## Exclude Segments

MarsQA will skip checking these four types of translation units in bilingual files because they're generally more reliable than others. Of course, you can also uncheck them if you want MarsQA to review these translation units.

* Locked
* 100% Match
* Context Matches
* Reviewed


# Share Report

<figure><img src="https://3313755758-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FU8az0lQAv2WfjEgcyNBz%2Fuploads%2FRS9fDDJEaMTJIVhVBOxB%2Fimage.png?alt=media&amp;token=c7b3c027-7e91-4aae-81e5-8702e77e4f1f" alt=""><figcaption></figcaption></figure>

If you need to send the inspection results to someone else, just hit the \[Share] button. \
Then, copy the link and send it to your partner so they can check out the report.&#x20;

Before sharing the report, you might want to hide some content. Click \[Ignore] to skip it, so others won't see it.&#x20;

You can also click \[Comment] next to a result to add your notes.

{% hint style="info" %}
Remember, this link will only be valid for 7 days.
{% endhint %}

<figure><img src="https://3313755758-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FU8az0lQAv2WfjEgcyNBz%2Fuploads%2FdjMXVscnWPOyobX0mE2y%2Fimage.png?alt=media&amp;token=e42fa623-b370-4c01-ac8a-720576165835" alt=""><figcaption></figcaption></figure>


# API documentation

API - Mars QA 1.2.1

Welcome to the MarsQA API (Application Programming Interface) documentation. MarsQA's API is a simple, convenient, and secure way to access MarsQA functionality from third-party applications programmatically. You can request a trial by visiting [https://qa.marshub.com](https://qa.marshub.com/) and contacting us via the [feedback](/the-marsqa-dashboard-explained#feedback) form.

To use this document, you should have a basic familiarity with software development and the MarsQA user interface.

## Create Session <a href="#create-session" id="create-session"></a>

This is a new API. The caller only provides data to be verified. Verification options and operations are set and operated by the user.

After creation, the caller and user interface cannot modify the file list and data, but can verify the data multiple times.

```curl
POST {{endpoint}}/api/v1/session
```

<table><thead><tr><th>JSON Field</th><th width="391">Description</th><th>Required</th></tr></thead><tbody><tr><td>editorURLTemplate</td><td>Used to navigate to your translation editor</td><td>Y</td></tr><tr><td>callbackUrl</td><td>For receiving verification reports</td><td>N</td></tr><tr><td><strong>files</strong></td><td>Documents</td><td>Y</td></tr><tr><td>file.type</td><td><code>file</code> or <code>segment</code></td><td>Y</td></tr><tr><td>file.filename</td><td>File Name</td><td>Y</td></tr><tr><td>file.uri</td><td><code>if type=file</code> URI is required</td><td>Y/N</td></tr><tr><td>file.content</td><td>Object Array, <code>if type=segment</code> content is required</td><td>Y/N</td></tr><tr><td>file.srcLang</td><td><code>if type=segment</code> srcLang is required</td><td>Y/N</td></tr><tr><td>file.trgLang</td><td><code>if type=segment</code> trgLang is required</td><td>Y/N</td></tr></tbody></table>

Create verify session example

```http
POST /api/v1/session HTTP/1.1
Content-Type: application/json
Authorization: Bearer <your_token>
...

{
  "editorURLTemplate": "<Optional>",
  "callbackUrl": "<your_url>",
  "files": [  
    {
      "type": "file",
      "docId": "your_doc_id",
      "filename": "SamplePhotoPrinter.doc.sdlxliff",
      "uri": "https://marsqa.oss-cn-hongkong.aliyuncs.com/0rux4gwov7cp4ub7.sdlxliff"
    },
    {
      "type": "segment",
      "docId": "your_doc_id",
      "filename": "your_filename.mqxliff",
      "srcLang": "en-US",
      "trgLang": "zh-CN",
      "content": [
        {
          "source": "The world is beautiful",
          "target": "世界很美好"
        },
        ...
      ]
    },
    ...
  ]
}
```

You will get a Session ID

```json
{
    "sid": "nam5tbxlmjzpbksq"
}
```

Then open the link in your browser: `{{endpoint}}/verify/:sessionId`, If authentication results already exist for the session, the results of the most recent request are displayed.

Every time the user clicks the "Verify" button, after the verification is successful, the URL of the message verification report will be sent to the `callbackUrl`

```json
{
    "url":"xxx"
}
```

## Get requests of session <a href="#get-requests-of-session" id="get-requests-of-session"></a>

`GET {{endpoint}}/api/v1/session/:sessionId/requests`

Response example

```json
[
    {
        "requestId": "202312111647-5494",
        "fileCount": 2,
        "title": "Multiple document QA (2 files)",
        "segCount": 1,
        "charCount": 0,
        "mtCharCount": 0,
        "createdAt": 1702284446000,
        "duration": 1,
        "status": "Succeeded",
        "sessionId": "t7aludu4c8erp80y"
    },
    ...
]
```

Get results: `GET {{endpoint}}/api/v1/report/:requestId`

Get the latest results of session: `GET {{endpoint}}/api/v1/session/:sessionId/last`

## Verify <a href="#verify" id="verify"></a>

* This API has added permission verification, you need API Token to access
* Punctuation Checker Options
* Space Checker Options

```curl
POST {{endpoint}}/api/v1/verify
```

Example

```http
POST /api/v1/verify HTTP/1.1
Content-Type: application/json
Authorization: Bearer <your_token>

{
  "editorURLTemplate": "<Optional>",
  "callbackURL": "<Optional>",
  "async": false,
  "input": [  <File Array>  ],
  "filter": {
    "excludeLockedSegments": true,
    "excludeICESegments": true,
    "exclude100Segments": true,
    "excludeReviewed": false
  },
  "verify": [...]
  ...
}
```

**Field Descriptions**

<table><thead><tr><th>JSON Field</th><th width="430">Description</th><th>Required</th></tr></thead><tbody><tr><td>editorURLTemplate</td><td>If you need to generate links for each Issue to link to your translation editor and navigate to rows, please specify this value; otherwise set to "". <code>eg: https://www.example.com/editor/{docId}#{segId}</code></td><td>Y</td></tr><tr><td>async</td><td>If <code>true</code>, you will quickly obtain the <code>Report ID</code> and later obtain the report data by callback.<br>OR: <code>GET /api/v1/report/{id}</code></td><td>N (default: false)</td></tr><tr><td>callbackURL</td><td><code>if async=true</code> callbackURL is required</td><td>N</td></tr><tr><td><strong>input</strong></td><td>Documents (JsonObject Array)</td><td>Y</td></tr><tr><td>input*.type</td><td><code>file</code> or <code>segment</code></td><td>Y</td></tr><tr><td>input*.filename</td><td>file name</td><td>Y</td></tr><tr><td>input*.uri</td><td><code>if type=file</code> URI is required</td><td>Y/N</td></tr><tr><td>input*.content</td><td><code>if type=segment</code> content is required</td><td>Y/N</td></tr><tr><td>input*.srcLang</td><td><code>if type=segment</code> srcLang is required</td><td>Y/N</td></tr><tr><td>input*.trgLang</td><td><code>if type=segment</code> trgLang is required</td><td>Y/N</td></tr><tr><td><strong>filter</strong></td><td>Exclude segments</td><td>Y</td></tr><tr><td>filter.excludeLockedSegments</td><td>Exclude locked segments</td><td>Y</td></tr><tr><td>filter.excludeICESegments</td><td>Exclude ICE segments</td><td>Y</td></tr><tr><td>filter.exclude100Segments</td><td>Exclude 100% match segments</td><td>Y</td></tr><tr><td>filter.excludeReviewed</td><td>Exclude reviewed/proofreading segments</td><td>Y</td></tr><tr><td><strong>verify</strong></td><td>Checker list and settings (JsonObject Array)</td><td>Y</td></tr><tr><td>verify*.id</td><td>Checker ID</td><td>Y</td></tr><tr><td>verify*.enable</td><td>false: this check is skipped</td><td>Y</td></tr><tr><td>verify*.group</td><td>Group name</td><td>N</td></tr><tr><td>verify*.description</td><td>description</td><td>N</td></tr><tr><td>verify*.options</td><td>checker options</td><td>N</td></tr></tbody></table>

**Error Codes**

<table><thead><tr><th>Code</th><th width="277">Description</th><th></th></tr></thead><tbody><tr><td>UNSUPPORTED_FILETYPE</td><td>File type not supported</td><td><code>Synch API</code>,<code>Async API</code></td></tr><tr><td>INVALID_URI</td><td>Invalid URI, cannot download file</td><td><code>Synch API</code></td></tr><tr><td>READ_FILE_FAILED</td><td>Unable to read/parse file</td><td><code>Synch API</code></td></tr><tr><td>UNKNOWN_ERROR</td><td></td><td><code>Synch API</code></td></tr></tbody></table>

## Synch Request

```curl
POST {endpoint}/api/v1/verify
```

You need to set async to `false`, which will directly respond to the verification results.

Request

```json
{
  "editorURLTemplate": "",
  "callbackURL": "",
  "async": false,
  "input": [  <File Array>  ],
  "filter": {
    "excludeLockedSegments": true,
    "excludeICESegments": true,
    "exclude100Segments": true,
    "excludeReviewed": false
  },
  "verify": [...]
  ...
}
```

Response (Status is Succeeded)

```json
{
  "id": "202209211808-9753",
  "status": "Succeeded",
  "info": {
    "duration": 1,
    "checkFileCount": 1,
    "segmentCount": 199,
    "checkSegmentCount": 81,
    "createdAt": 1663754929118,
    "mtCheckedChars": 0,
    "mtMessage": null
  },
  "issues": [
    <issue data>
  ],
  "errors": []
}
```

## Async Request <a href="#async-request" id="async-request"></a>

```curl
POST {endpoint}/api/v1/verify
```

You need to set async to `true` before sending the request, and then you will get a request ID. You can then use the request ID to actively fetch the validation results, or receive the results via a callback.

**Request example**

```json
{
  "editorURLTemplate": "",
  "callbackURL": "<your callback url>",
  "async": true,
  "input": [  <File Array>  ],
  "filter": { ...  },
  "verify": [...]
  ...
}
```

**Response example**

```json
{
  "id": "202209211808-9753",
  "status": "InProgress",
  "errors": ""
}
```

**Get result by callback**

Callback on success

```json
{
    "id": "202209211808-9753",
    "status": "Succeeded",
    "info": { ... },
    "issues": [...]
}
```

Callback on failure

```json
{ 
  "id":"202209211808-9753",
  "status":"Failed",
  "error":"..."
}
```

The result will be send to callbackUrl when QA has been completed.

## Get result by request\_id <a href="#get-result-by-request_id" id="get-result-by-request_id"></a>

```curl
GET {endpoint}/api/report/:id
```

* `id` path param, request\_id

**Example**

```curl
GET {endpoint}/api/report/202209211808-9753
```

```json
{
    "id": "202209211808-9753",
    "status": "Succeeded",
    "info": { ... },
    "issues": [...]
}
```

## Share <a href="#share" id="share"></a>

Generate shared links

```curl
POST {endpoint}/api/report/:requestId/share
```

Response

```json
{
    "token": "eyJ0eXAiO...",
    "url": "xxx"
}
```

Shared link expires after seven days

## Checker list <a href="#checker-list" id="checker-list"></a>

**Basic Group**

```json
[
    {
        "id": "InconsistencyTargetChecker",
        "enable": true,
        "description": "Inconsistency in Target",
        "options": {
            "ignoreCase": true,
            "ignoreTags": true,
            "ignoreEndPunctuation": true
        }
    },
    {
        "id": "InconsistencySourceChecker",
        "enable": true,
        "description": "Inconsistency in Source",
        "options": {
            "ignoreCase": true,
            "ignoreTags": true,
            "ignoreEndPunctuation": true
        }
    },
    {
        "id": "EmptyChecker",
        "enable": true,
        "description": "Empty Translation"
    },
    {
        "id": "TargetSameAsSourceChecker",
        "enable": true,
        "description": "Target Same as Source"
    }
]
```

**Standard Group**

```json
[
    {
        "id": "PunctuationChecker",
        "enable": true,
        "description": "Punctuation Mismatch",
        "options": {
            "checkIncorrectPunctuation": false,
            "checkMultiplePunctuation": true,
            "checkBracketMismatch": true,
            "checkPunctuationMismatch": true
        }
    },
    {
        "id": "TagChecker",
        "enable": true,
        "description": "Tag Mismatch"
    },
    {
        "id": "URLChecker",
        "enable": true,
        "description": "URL Mismatch"
    },
    {
        "id": "CamelCaseChecker",
        "enable": true,
        "description": "Camel Case Mismatch"
    },
    {
        "id": "AllUppercaseChecker",
        "enable": true,
        "description": "All Uppercase Mismatch"
    },
    {
        "id": "AlphanumericChecker",
        "enable": true,
        "description": "Alphanumeric Mismatch"
    },
    {
        "id": "NumericChecker",
        "enable": true,
        "description": "Numeric Mismatch"
    },
    {
        "id": "VariableChecker",
        "enable": true,
        "description": "Variable/Placeholder Mismatch",
        "options": {
            "regex": ""
        }
    },
    {
        "id": "TermChecker",
        "enable": false,
        "description": "Key Term Mismatch",
        "options": {
            "terms": []
        }
    },
    {
        "id": "SpaceChecker",
        "enable": true,
        "description": "Spaces Check",
        "options": {
            "checkMultipleSpaces": true,
            "checkZeroWidthSpaces": true,
            "checkSpacingBeforePunctuation": true,
            "checkMissingSpaceAfterPunctuation": true,
            "checkStartingSpaces": true,
            "checkTrailingSpaces": true,
            "checkExtraSpaces": true
        }
    },
    {
        "id": "RepeatedWordChecker",
        "enable": false,
        "description": "Repeated Words"
    },
    {
        "id": "ForbiddenWordChecker",
        "enable": true,
        "description": "Forbidden Words",
        "options": {
            "dict": []
        }
    },
    {
        "id": "UnconfirmedChecker",
        "enable": true,
        "description": "Translation not Confirmed"
    },
    {
        "id": "FuzzyMatchChecker",
        "enable": true,
        "description": "Unedited Fuzzy Match"
    }
]
```

**Advance Group**

```json
[
    {
        "id": "SpellChecker",
        "enable": false,
        "description": "Spell Check"
    },
    {
        "id": "MachineTranslationChecker",
        "enable": false,
        "description": "Machine Translation Check",
        "options": {
            "showDiff": false,
            "threshold": 90,
            "percent": 10,
            "engine": "Google Translate",
            "userAvailableChars": 1000000
        }
    }
]
```

**`userAvailableChars`** is the number of characters available to the user. If the number of characters in the machine translation spot-check is greater than this value, an error message will be returned.

## Example <a href="#example" id="example"></a>

Request body example

```json
{
  "editorURLTemplate": "<Optional>",
  "callbackURL": "<Optional>",
  "input": [
    {
      "type": "file",
      "filename": "<file name>",
      "url": "<base64(file)>"
    }
  ],
  "filter": {
    "excludeLockedSegments": true,
    "excludeICESegments": true,
    "exclude100Segments": true,
    "excludeReviewed": false
  },
  "verify": [
    {
      "id": "InconsistencyTargetChecker",
      "enable": true,
      "group": "Basic",
      "description": "Inconsistency in Target",
      "options": {
        "ignoreCase": true,
        "ignoreTags": true,
        "ignoreEndPunctuation": true
      }
    },
    {
      "id": "InconsistencySourceChecker",
      "enable": true,
      "group": "Basic",
      "description": "Inconsistency in Source",
      "options": {
        "ignoreCase": true,
        "ignoreTags": true,
        "ignoreEndPunctuation": true
      }
    },
    {
      "id": "EmptyChecker",
      "enable": true,
      "group": "Basic",
      "description": "Empty Translation"
    },
    {
      "id": "TargetSameAsSourceChecker",
      "enable": true,
      "group": "Basic",
      "description": "Target Same as Source"
    },
    {
      "id": "PunctuationChecker",
      "enable": true,
      "group": "Common",
      "description": "Punctuation Mismatch",
      "options": {
        "checkIncorrectPunctuation": false,
        "checkMultiplePunctuation": true,
        "checkBracketMismatch": true,
        "checkPunctuationMismatch": true
      }
    },
    {
      "id": "TagChecker",
      "enable": true,
      "group": "Common",
      "description": "Tag Mismatch"
    },
    {
      "id": "URLChecker",
      "enable": true,
      "group": "Common",
      "description": "URL Mismatch"
    },
    {
      "id": "CamelCaseChecker",
      "enable": true,
      "group": "Common",
      "description": "Camel Case Mismatch"
    },
    {
      "id": "AllUppercaseChecker",
      "enable": true,
      "group": "Common",
      "description": "All Uppercase Mismatch"
    },
    {
      "id": "AlphanumericChecker",
      "enable": true,
      "group": "Common",
      "description": "Alphanumeric Mismatch"
    },
    {
      "id": "NumericChecker",
      "enable": true,
      "group": "Common",
      "description": "Numeric Mismatch"
    },
    {
      "id": "VariableChecker",
      "enable": true,
      "group": "Common",
      "description": "Variable/Placeholder Mismatch",
      "options": {
        "regex": ""
      }
    },
    {
      "id": "TermChecker",
      "enable": true,
      "group": "Common",
      "description": "Key Term Mismatch",
      "options": {
        "terms": [
          {
            "source": "Example",
            "target": "例子"
          }
        ]
      }
    },
    {
      "id": "SpaceChecker",
      "enable": true,
      "group": "Common",
      "description": "Spaces Check",
      "options": {
        "checkMultipleSpaces": true,
        "checkZeroWidthSpaces": true,
        "checkSpacingBeforePunctuation": true,
        "checkMissingSpaceAfterPunctuation": true,
        "checkStartingSpaces": true,
        "checkTrailingSpaces": true,
        "checkExtraSpaces": true
      }
    },
    {
      "id": "RepeatedWordChecker",
      "enable": false,
      "group": "Common",
      "description": "Repeated Words"
    },
    {
      "id": "ForbiddenWordChecker",
      "enable": true,
      "group": "Common",
      "description": "Forbidden Words",
      "options": {
        "dict": [
          "shameless",
          "obscene",
          "other"
        ]
      }
    },
    {
      "id": "UnconfirmedChecker",
      "enable": true,
      "group": "Common",
      "description": "Translation not Confirmed"
    },
    {
      "id": "FuzzyMatchChecker",
      "enable": true,
      "group": "Common",
      "description": "Unedited Fuzzy Match"
    },
    {
      "id": "SpellChecker",
      "enable": false,
      "group": "Advance",
      "description": "Spell Check"
    },
    {
      "id": "MachineTranslationChecker",
      "enable": false,
      "group": "Advance",
      "description": "Machine Translation Check",
      "options": {
        "showDiff": false,
        "threshold": 90,
        "percent": 10,
        "engine": "Google Translate/Microsoft Translate/Baidu Translate"
      }
    }
  ]
}
```

Response Example

```json
{
  "id": "tTEGQPIcxWWLssUNirvUzpNv",
  "info": {
    "duration": 1,
    "checkFileCount": 1,
    "checkSegmentCount": 68,
    "createdAt": 1649233288155,
    "mtCheckedChars": 0,
    "mtMessage": null
  },
  "issues": [
    {
      "type": "EMPTY_TARGET",
      "description": "Empty Translation",
      "level": "Error",
      "issues": [
        {
          "id": 2,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "2",
          "segId": "2",
          "source": "Error trying to connect server.",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 3,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "3",
          "segId": "3",
          "source": "Please reload the game.",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 4,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "4",
          "segId": "4",
          "source": "Ok",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 6,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "5",
          "segId": "5",
          "source": "<a>Response Error</a>",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 7,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "6",
          "segId": "6",
          "source": "Please reload the game.",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 8,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "7",
          "segId": "7",
          "source": "Ok",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 10,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "8",
          "segId": "8",
          "source": "Insufficient Funds",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 11,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "9",
          "segId": "9",
          "source": "Sorry, you do not have enough funds in your balance.",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 12,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "10",
          "segId": "10",
          "source": "Fund your account to continue playing.",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 13,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "11",
          "segId": "11",
          "source": "Cancel",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 15,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "12",
          "segId": "12",
          "source": "Deposit",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 16,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "13",
          "segId": "13",
          "source": "Option not available",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 17,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "14",
          "segId": "14",
          "source": "Impossible see this option.",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 18,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "15",
          "segId": "15",
          "source": "Try with other options.",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 19,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "16",
          "segId": "16",
          "source": "Okay",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 20,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "17",
          "segId": "17",
          "source": "Low Funds",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 21,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "18",
          "segId": "18",
          "source": "Sorry, you have low funds in your balance.",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 22,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "19",
          "segId": "19",
          "source": "Cancel",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 24,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "20",
          "segId": "20",
          "source": "Deposit",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 25,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "21",
          "segId": "21",
          "source": "Pending Game",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 26,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "22",
          "segId": "22",
          "source": "You have an open previous game.",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 27,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "23",
          "segId": "23",
          "source": "Ok",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 29,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "24",
          "segId": "24",
          "source": "Auto play Limit",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 30,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "25",
          "segId": "25",
          "source": "You have research auto play loss limit of: {x}",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 31,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "26",
          "segId": "26",
          "source": "Ok",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 33,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "27",
          "segId": "27",
          "source": "Auto play Limit",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 34,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "28",
          "segId": "28",
          "source": "You have research auto play win limit of: {x}",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 35,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "29",
          "segId": "29",
          "source": "Ok",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 37,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "30",
          "segId": "30",
          "source": "Auto play Finished",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 38,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "31",
          "segId": "31",
          "source": "All Auto Play games have been played.",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 39,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "32",
          "segId": "32",
          "source": "Ok",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 41,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "33",
          "segId": "33",
          "source": "Free Plays Available",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 42,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "34",
          "segId": "34",
          "source": "You have an active Promotion of {x} Free Plays with a Bet of {y}.",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 43,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "35",
          "segId": "35",
          "source": "Do you want to play it now?",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 44,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "36",
          "segId": "36",
          "source": "Cancel",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 46,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "37",
          "segId": "37",
          "source": "Ok",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 48,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "38",
          "segId": "38",
          "source": "GO!",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 49,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "39",
          "segId": "39",
          "source": "GO!",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 50,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "40",
          "segId": "40",
          "source": "PAYTABLE",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 51,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "41",
          "segId": "41",
          "source": "HELP",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 52,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "42",
          "segId": "42",
          "source": "FUN MODE",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 53,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "43",
          "segId": "43",
          "source": "Replay",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 54,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "44",
          "segId": "44",
          "source": "Touch",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 55,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "45",
          "segId": "45",
          "source": "Won at",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 56,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "46",
          "segId": "46",
          "source": "Bonus Available",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 57,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "47",
          "segId": "47",
          "source": "Free Spins Available",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 58,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "48",
          "segId": "48",
          "source": "Balance:",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 59,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "49",
          "segId": "49",
          "source": "Balance",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 60,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "50",
          "segId": "50",
          "source": "Win:",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 61,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "51",
          "segId": "51",
          "source": "Win",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 62,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "52",
          "segId": "52",
          "source": "Bet:",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 63,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "53",
          "segId": "53",
          "source": "Bet",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 64,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "54",
          "segId": "54",
          "source": "Free Spins",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 65,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "55",
          "segId": "55",
          "source": "Free Spins Won",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 66,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "56",
          "segId": "56",
          "source": "Bonus Won",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 67,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "57",
          "segId": "57",
          "source": "Coin Size",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 68,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "58",
          "segId": "58",
          "source": "Lines",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 69,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "59",
          "segId": "59",
          "source": "Total Bet:",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 70,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "60",
          "segId": "60",
          "source": "AUTO PLAY",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 71,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "61",
          "segId": "61",
          "source": "Advanced",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 72,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "62",
          "segId": "62",
          "source": "Loss Limit",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 73,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "63",
          "segId": "63",
          "source": "Win Limit",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 74,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "64",
          "segId": "64",
          "source": "Promo",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 75,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "65",
          "segId": "65",
          "source": "Wins",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 76,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "66",
          "segId": "66",
          "source": "Select one item",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 77,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "67",
          "segId": "67",
          "source": "Select items",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 78,
          "docId": null,
          "type": "EMPTY_TARGET",
          "tuId": "68",
          "segId": "68",
          "source": "You Won",
          "target": "** Untranslated **",
          "mt": null,
          "mtsim": null,
          "message": "Empty Translation",
          "level": "Error",
          "marks": null,
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        }
      ],
      "message": null
    },
    {
      "type": "NUMERIC",
      "description": "Numeric Mismatch",
      "level": "Waring",
      "issues": [
        {
          "id": 1,
          "docId": null,
          "type": "NUMERIC",
          "tuId": "1",
          "segId": "1",
          "source": "Connection Error",
          "target": "[mark1]0006[/mark1]",
          "mt": null,
          "mtsim": null,
          "message": "Extra: 0006",
          "level": "Waring",
          "marks": [
            {
              "id": 1,
              "type": "Target",
              "start": 0,
              "end": 4,
              "text": "0006",
              "message": "Numeric Mismatch",
              "highlight": true
            }
          ],
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        }
      ],
      "message": null
    },
    {
      "type": "TERM",
      "description": "Key Term Mismatch",
      "level": "Waring",
      "issues": [
        {
          "id": 5,
          "docId": null,
          "type": "TERM",
          "tuId": "4",
          "segId": "4",
          "source": "[mark2]Ok[/mark2]",
          "target": "",
          "mt": null,
          "mtsim": null,
          "message": "Glossary term not applied:Ok",
          "level": "Waring",
          "marks": [
            {
              "id": 2,
              "type": "Source",
              "start": 0,
              "end": 2,
              "text": "Ok",
              "message": null,
              "highlight": true
            }
          ],
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 9,
          "docId": null,
          "type": "TERM",
          "tuId": "7",
          "segId": "7",
          "source": "[mark3]Ok[/mark3]",
          "target": "",
          "mt": null,
          "mtsim": null,
          "message": "Glossary term not applied:Ok",
          "level": "Waring",
          "marks": [
            {
              "id": 3,
              "type": "Source",
              "start": 0,
              "end": 2,
              "text": "Ok",
              "message": null,
              "highlight": true
            }
          ],
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 14,
          "docId": null,
          "type": "TERM",
          "tuId": "11",
          "segId": "11",
          "source": "[mark4]Cancel[/mark4]",
          "target": "",
          "mt": null,
          "mtsim": null,
          "message": "Glossary term not applied:Cancel",
          "level": "Waring",
          "marks": [
            {
              "id": 4,
              "type": "Source",
              "start": 0,
              "end": 6,
              "text": "Cancel",
              "message": null,
              "highlight": true
            }
          ],
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 23,
          "docId": null,
          "type": "TERM",
          "tuId": "19",
          "segId": "19",
          "source": "[mark5]Cancel[/mark5]",
          "target": "",
          "mt": null,
          "mtsim": null,
          "message": "Glossary term not applied:Cancel",
          "level": "Waring",
          "marks": [
            {
              "id": 5,
              "type": "Source",
              "start": 0,
              "end": 6,
              "text": "Cancel",
              "message": null,
              "highlight": true
            }
          ],
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 28,
          "docId": null,
          "type": "TERM",
          "tuId": "23",
          "segId": "23",
          "source": "[mark6]Ok[/mark6]",
          "target": "",
          "mt": null,
          "mtsim": null,
          "message": "Glossary term not applied:Ok",
          "level": "Waring",
          "marks": [
            {
              "id": 6,
              "type": "Source",
              "start": 0,
              "end": 2,
              "text": "Ok",
              "message": null,
              "highlight": true
            }
          ],
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 32,
          "docId": null,
          "type": "TERM",
          "tuId": "26",
          "segId": "26",
          "source": "[mark7]Ok[/mark7]",
          "target": "",
          "mt": null,
          "mtsim": null,
          "message": "Glossary term not applied:Ok",
          "level": "Waring",
          "marks": [
            {
              "id": 7,
              "type": "Source",
              "start": 0,
              "end": 2,
              "text": "Ok",
              "message": null,
              "highlight": true
            }
          ],
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 36,
          "docId": null,
          "type": "TERM",
          "tuId": "29",
          "segId": "29",
          "source": "[mark8]Ok[/mark8]",
          "target": "",
          "mt": null,
          "mtsim": null,
          "message": "Glossary term not applied:Ok",
          "level": "Waring",
          "marks": [
            {
              "id": 8,
              "type": "Source",
              "start": 0,
              "end": 2,
              "text": "Ok",
              "message": null,
              "highlight": true
            }
          ],
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 40,
          "docId": null,
          "type": "TERM",
          "tuId": "32",
          "segId": "32",
          "source": "[mark9]Ok[/mark9]",
          "target": "",
          "mt": null,
          "mtsim": null,
          "message": "Glossary term not applied:Ok",
          "level": "Waring",
          "marks": [
            {
              "id": 9,
              "type": "Source",
              "start": 0,
              "end": 2,
              "text": "Ok",
              "message": null,
              "highlight": true
            }
          ],
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 45,
          "docId": null,
          "type": "TERM",
          "tuId": "36",
          "segId": "36",
          "source": "[mark10]Cancel[/mark10]",
          "target": "",
          "mt": null,
          "mtsim": null,
          "message": "Glossary term not applied:Cancel",
          "level": "Waring",
          "marks": [
            {
              "id": 10,
              "type": "Source",
              "start": 0,
              "end": 6,
              "text": "Cancel",
              "message": null,
              "highlight": true
            }
          ],
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        },
        {
          "id": 47,
          "docId": null,
          "type": "TERM",
          "tuId": "37",
          "segId": "37",
          "source": "[mark11]Ok[/mark11]",
          "target": "",
          "mt": null,
          "mtsim": null,
          "message": "Glossary term not applied: Ok",
          "level": "Waring",
          "marks": [
            {
              "id": 11,
              "type": "Source",
              "start": 0,
              "end": 2,
              "text": "Ok",
              "message": null,
              "highlight": true
            }
          ],
          "groupId": null,
          "filename": "document.mqxliff",
          "url": null
        }
      ],
      "message": null
    }
  ],
  "errors": []
}
```


# Reporting Bugs and Suggestions

We welcome your feedback on any errors you encounter in the program.&#x20;

We are also open to suggestions for improving areas that you find confusing.&#x20;

Please submit your bug report or suggestion by visiting <https://qax.marshub.com> and contacting us via the [feedback](/the-marsqa-dashboard-explained#feedback) form.&#x20;

All information you provide will be kept confidential and used solely to resolve the issue.


