curl --request POST \
--url https://cloud.memsource.com/web/api2/v1/lqa/assessments/{jobUid} \
--header 'Authorization: <api-key>'import requests
url = "https://cloud.memsource.com/web/api2/v1/lqa/assessments/{jobUid}"
headers = {"Authorization": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: '<api-key>'}};
fetch('https://cloud.memsource.com/web/api2/v1/lqa/assessments/{jobUid}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://cloud.memsource.com/web/api2/v1/lqa/assessments/{jobUid}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://cloud.memsource.com/web/api2/v1/lqa/assessments/{jobUid}"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://cloud.memsource.com/web/api2/v1/lqa/assessments/{jobUid}")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://cloud.memsource.com/web/api2/v1/lqa/assessments/{jobUid}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"lqaProfile": {
"dateCreated": "2024-03-15T09:00:00Z",
"errorCategories": {
"accuracy": {
"accuracy": {
"code": 123,
"enabled": true,
"weight": 1
},
"addition": {
"code": 123,
"enabled": true,
"weight": 1
},
"improperTmMatch": {
"code": 123,
"enabled": true,
"weight": 1
},
"mistranslation": {
"code": 123,
"enabled": true,
"weight": 1
},
"omission": {
"code": 123,
"enabled": true,
"weight": 1
},
"overTranslation": {
"code": 123,
"enabled": true,
"weight": 1
},
"underTranslation": {
"code": 123,
"enabled": true,
"weight": 1
},
"untranslated": {
"code": 123,
"enabled": true,
"weight": 1
}
},
"design": {
"design": {
"code": 123,
"enabled": true,
"weight": 1
},
"length": {
"code": 123,
"enabled": true,
"weight": 1
},
"localFormatting": {
"code": 123,
"enabled": true,
"weight": 1
},
"markup": {
"code": 123,
"enabled": true,
"weight": 1
},
"missingText": {
"code": 123,
"enabled": true,
"weight": 1
},
"truncation": {
"code": 123,
"enabled": true,
"weight": 1
}
},
"fluency": {
"characterEncoding": {
"code": 123,
"enabled": true,
"weight": 1
},
"crossReference": {
"code": 123,
"enabled": true,
"weight": 1
},
"fluency": {
"code": 123,
"enabled": true,
"weight": 1
},
"grammar": {
"code": 123,
"enabled": true,
"weight": 1
},
"grammaticalRegister": {
"code": 123,
"enabled": true,
"weight": 1
},
"inconsistency": {
"code": 123,
"enabled": true,
"weight": 1
},
"punctuation": {
"code": 123,
"enabled": true,
"weight": 1
},
"spelling": {
"code": 123,
"enabled": true,
"weight": 1
}
},
"localeConvention": {
"addressFormat": {
"code": 123,
"enabled": true,
"weight": 1
},
"currencyFormat": {
"code": 123,
"enabled": true,
"weight": 1
},
"dateFormat": {
"code": 123,
"enabled": true,
"weight": 1
},
"localeConvention": {
"code": 123,
"enabled": true,
"weight": 1
},
"measurementFormat": {
"code": 123,
"enabled": true,
"weight": 1
},
"shortcutKey": {
"code": 123,
"enabled": true,
"weight": 1
},
"telephoneFormat": {
"code": 123,
"enabled": true,
"weight": 1
}
},
"other": {
"other": {
"code": 123,
"enabled": true,
"weight": 1
}
},
"style": {
"awkward": {
"code": 123,
"enabled": true,
"weight": 1
},
"companyStyle": {
"code": 123,
"enabled": true,
"weight": 1
},
"inconsistentStyle": {
"code": 123,
"enabled": true,
"weight": 1
},
"style": {
"code": 123,
"enabled": true,
"weight": 1
},
"thirdPartyStyle": {
"code": 123,
"enabled": true,
"weight": 1
},
"unidiomatic": {
"code": 123,
"enabled": true,
"weight": 1
}
},
"terminology": {
"inconsistentUseOfTerminology": {
"code": 123,
"enabled": true,
"weight": 1
},
"inconsistentWithTb": {
"code": 123,
"enabled": true,
"weight": 1
},
"terminology": {
"code": 123,
"enabled": true,
"weight": 1
}
},
"verity": {
"cultureSpecificReference": {
"code": 123,
"enabled": true,
"weight": 1
},
"verity": {
"code": 123,
"enabled": true,
"weight": 1
}
}
},
"isDefault": true,
"name": "<string>",
"organization": {
"uid": "3HYnHHLkTPJfMxBCDbPXFe"
},
"passFailThreshold": {
"minScorePercentage": 99
},
"penaltyPoints": {
"critical": {
"code": 123,
"value": 123
},
"major": {
"code": 123,
"value": 123
},
"minor": {
"code": 123,
"value": 123
},
"neutral": {
"code": 123,
"value": 123
}
},
"uid": "LqP8kMckeDcg"
},
"startedDate": "2023-11-07T05:31:56Z"
}Start LQA Assessment
Starts a Language Quality Assessment (LQA) for a single job part identified by its unique identifier (UID). LQA evaluates translation quality against the profile assigned to the job part’s workflow step, scoring errors by category and severity in line with MQM (Multidimensional Quality Metrics) methodology.
Use this endpoint after a job part has been translated and is ready for linguistic review. The returned profile captures the error categories, severity weights, and pass/fail threshold that reviewers will apply when annotating the assessment.
If an assessment is already in progress or finished for the given job part, the existing assessment is discarded and a new one is started. All previously recorded errors are lost; this operation is not safe to retry without accepting data loss.
Error conditions:
- 400 Bad Request — LQA is not configured for the job part’s workflow step. Configure LQA for the workflow step in the project settings before starting an assessment.
- 403 Forbidden (Auto LQA enabled) — The project has Automatic LQA enabled. Disable Auto LQA in the project settings to use manual assessments.
- 403 Forbidden (insufficient permission) — The caller does not have edit permission on the job part. Request edit access from a project manager or administrator.
- 404 Not Found — No job part exists for the provided UID. Verify the jobUid is correct and belongs to a project accessible to the caller.
curl --request POST \
--url https://cloud.memsource.com/web/api2/v1/lqa/assessments/{jobUid} \
--header 'Authorization: <api-key>'import requests
url = "https://cloud.memsource.com/web/api2/v1/lqa/assessments/{jobUid}"
headers = {"Authorization": "<api-key>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: '<api-key>'}};
fetch('https://cloud.memsource.com/web/api2/v1/lqa/assessments/{jobUid}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://cloud.memsource.com/web/api2/v1/lqa/assessments/{jobUid}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://cloud.memsource.com/web/api2/v1/lqa/assessments/{jobUid}"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://cloud.memsource.com/web/api2/v1/lqa/assessments/{jobUid}")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://cloud.memsource.com/web/api2/v1/lqa/assessments/{jobUid}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"lqaProfile": {
"dateCreated": "2024-03-15T09:00:00Z",
"errorCategories": {
"accuracy": {
"accuracy": {
"code": 123,
"enabled": true,
"weight": 1
},
"addition": {
"code": 123,
"enabled": true,
"weight": 1
},
"improperTmMatch": {
"code": 123,
"enabled": true,
"weight": 1
},
"mistranslation": {
"code": 123,
"enabled": true,
"weight": 1
},
"omission": {
"code": 123,
"enabled": true,
"weight": 1
},
"overTranslation": {
"code": 123,
"enabled": true,
"weight": 1
},
"underTranslation": {
"code": 123,
"enabled": true,
"weight": 1
},
"untranslated": {
"code": 123,
"enabled": true,
"weight": 1
}
},
"design": {
"design": {
"code": 123,
"enabled": true,
"weight": 1
},
"length": {
"code": 123,
"enabled": true,
"weight": 1
},
"localFormatting": {
"code": 123,
"enabled": true,
"weight": 1
},
"markup": {
"code": 123,
"enabled": true,
"weight": 1
},
"missingText": {
"code": 123,
"enabled": true,
"weight": 1
},
"truncation": {
"code": 123,
"enabled": true,
"weight": 1
}
},
"fluency": {
"characterEncoding": {
"code": 123,
"enabled": true,
"weight": 1
},
"crossReference": {
"code": 123,
"enabled": true,
"weight": 1
},
"fluency": {
"code": 123,
"enabled": true,
"weight": 1
},
"grammar": {
"code": 123,
"enabled": true,
"weight": 1
},
"grammaticalRegister": {
"code": 123,
"enabled": true,
"weight": 1
},
"inconsistency": {
"code": 123,
"enabled": true,
"weight": 1
},
"punctuation": {
"code": 123,
"enabled": true,
"weight": 1
},
"spelling": {
"code": 123,
"enabled": true,
"weight": 1
}
},
"localeConvention": {
"addressFormat": {
"code": 123,
"enabled": true,
"weight": 1
},
"currencyFormat": {
"code": 123,
"enabled": true,
"weight": 1
},
"dateFormat": {
"code": 123,
"enabled": true,
"weight": 1
},
"localeConvention": {
"code": 123,
"enabled": true,
"weight": 1
},
"measurementFormat": {
"code": 123,
"enabled": true,
"weight": 1
},
"shortcutKey": {
"code": 123,
"enabled": true,
"weight": 1
},
"telephoneFormat": {
"code": 123,
"enabled": true,
"weight": 1
}
},
"other": {
"other": {
"code": 123,
"enabled": true,
"weight": 1
}
},
"style": {
"awkward": {
"code": 123,
"enabled": true,
"weight": 1
},
"companyStyle": {
"code": 123,
"enabled": true,
"weight": 1
},
"inconsistentStyle": {
"code": 123,
"enabled": true,
"weight": 1
},
"style": {
"code": 123,
"enabled": true,
"weight": 1
},
"thirdPartyStyle": {
"code": 123,
"enabled": true,
"weight": 1
},
"unidiomatic": {
"code": 123,
"enabled": true,
"weight": 1
}
},
"terminology": {
"inconsistentUseOfTerminology": {
"code": 123,
"enabled": true,
"weight": 1
},
"inconsistentWithTb": {
"code": 123,
"enabled": true,
"weight": 1
},
"terminology": {
"code": 123,
"enabled": true,
"weight": 1
}
},
"verity": {
"cultureSpecificReference": {
"code": 123,
"enabled": true,
"weight": 1
},
"verity": {
"code": 123,
"enabled": true,
"weight": 1
}
}
},
"isDefault": true,
"name": "<string>",
"organization": {
"uid": "3HYnHHLkTPJfMxBCDbPXFe"
},
"passFailThreshold": {
"minScorePercentage": 99
},
"penaltyPoints": {
"critical": {
"code": 123,
"value": 123
},
"major": {
"code": 123,
"value": 123
},
"minor": {
"code": 123,
"value": 123
},
"neutral": {
"code": 123,
"value": 123
}
},
"uid": "LqP8kMckeDcg"
},
"startedDate": "2023-11-07T05:31:56Z"
}Authorizations
Get a token from auth/login endpoint and then pass it in the Authorization HTTP header in every subsequent API call. For more information visit our help center.
Path Parameters
Unique identifier (UID) of the job part to assess
Was this page helpful?