curl --request POST \
--url https://cloud.memsource.com/web/api2/v4/projects/{projectUid}/jobs/{jobUid}/qualityAssurances/run \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"initialSegment": {
"uid": "<string>"
},
"maxQaWarningsCount": 500,
"warningTypes": []
}
'import requests
url = "https://cloud.memsource.com/web/api2/v4/projects/{projectUid}/jobs/{jobUid}/qualityAssurances/run"
payload = {
"initialSegment": { "uid": "<string>" },
"maxQaWarningsCount": 500,
"warningTypes": []
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({initialSegment: {uid: '<string>'}, maxQaWarningsCount: 500, warningTypes: []})
};
fetch('https://cloud.memsource.com/web/api2/v4/projects/{projectUid}/jobs/{jobUid}/qualityAssurances/run', 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/v4/projects/{projectUid}/jobs/{jobUid}/qualityAssurances/run",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'initialSegment' => [
'uid' => '<string>'
],
'maxQaWarningsCount' => 500,
'warningTypes' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://cloud.memsource.com/web/api2/v4/projects/{projectUid}/jobs/{jobUid}/qualityAssurances/run"
payload := strings.NewReader("{\n \"initialSegment\": {\n \"uid\": \"<string>\"\n },\n \"maxQaWarningsCount\": 500,\n \"warningTypes\": []\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
req.Header.Add("Content-Type", "application/json")
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/v4/projects/{projectUid}/jobs/{jobUid}/qualityAssurances/run")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"initialSegment\": {\n \"uid\": \"<string>\"\n },\n \"maxQaWarningsCount\": 500,\n \"warningTypes\": []\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://cloud.memsource.com/web/api2/v4/projects/{projectUid}/jobs/{jobUid}/qualityAssurances/run")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"initialSegment\": {\n \"uid\": \"<string>\"\n },\n \"maxQaWarningsCount\": 500,\n \"warningTypes\": []\n}"
response = http.request(request)
puts response.read_body{
"finished": true,
"segmentWarnings": [
{
"ignoredChecks": [
"<string>"
],
"segmentId": "<string>",
"warnings": [
{
"type": "<string>",
"id": "<string>",
"ignored": true,
"repetitionGroupId": "<string>"
}
]
}
]
}Run quality assurance v4
Runs quality assurance checks on the job and returns any warnings found. Checks can detect issues such as tags and formatting (missing, misplaced, or malformed tags; inconsistent tag content; missing or redundant line breaks), numbers, terminology, spelling, forbidden strings, translation length, whitespace, repeated words, unresolved comments and conversations, and source/target consistency. The response reports per-warning detail (for example tag counts for a JoinTags warning, the misplaced tag for a NestedTags warning, or source/target character positions), pinpointing exactly which segments and tags need attention. Call “Get QA settings” endpoint to get the list of checks enabled for this project or job. The number of concurrent runs per user is limited. When the limit is exceeded, the endpoint responds with 429 Too Many Requests and a Retry-After header instead of waiting; retry after the given delay. The limit is counted per server instance.
curl --request POST \
--url https://cloud.memsource.com/web/api2/v4/projects/{projectUid}/jobs/{jobUid}/qualityAssurances/run \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"initialSegment": {
"uid": "<string>"
},
"maxQaWarningsCount": 500,
"warningTypes": []
}
'import requests
url = "https://cloud.memsource.com/web/api2/v4/projects/{projectUid}/jobs/{jobUid}/qualityAssurances/run"
payload = {
"initialSegment": { "uid": "<string>" },
"maxQaWarningsCount": 500,
"warningTypes": []
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({initialSegment: {uid: '<string>'}, maxQaWarningsCount: 500, warningTypes: []})
};
fetch('https://cloud.memsource.com/web/api2/v4/projects/{projectUid}/jobs/{jobUid}/qualityAssurances/run', 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/v4/projects/{projectUid}/jobs/{jobUid}/qualityAssurances/run",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'initialSegment' => [
'uid' => '<string>'
],
'maxQaWarningsCount' => 500,
'warningTypes' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://cloud.memsource.com/web/api2/v4/projects/{projectUid}/jobs/{jobUid}/qualityAssurances/run"
payload := strings.NewReader("{\n \"initialSegment\": {\n \"uid\": \"<string>\"\n },\n \"maxQaWarningsCount\": 500,\n \"warningTypes\": []\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
req.Header.Add("Content-Type", "application/json")
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/v4/projects/{projectUid}/jobs/{jobUid}/qualityAssurances/run")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"initialSegment\": {\n \"uid\": \"<string>\"\n },\n \"maxQaWarningsCount\": 500,\n \"warningTypes\": []\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://cloud.memsource.com/web/api2/v4/projects/{projectUid}/jobs/{jobUid}/qualityAssurances/run")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"initialSegment\": {\n \"uid\": \"<string>\"\n },\n \"maxQaWarningsCount\": 500,\n \"warningTypes\": []\n}"
response = http.request(request)
puts response.read_body{
"finished": true,
"segmentWarnings": [
{
"ignoredChecks": [
"<string>"
],
"segmentId": "<string>",
"warnings": [
{
"type": "<string>",
"id": "<string>",
"ignored": true,
"repetitionGroupId": "<string>"
}
]
}
]
}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.
Body
QA run configuration
Show child attributes
Show child attributes
Maximum number of QA warnings in result, default: 100. For efficiency reasons QA warnings are processed with minimum segments chunk size 10, therefore slightly more warnings are returned.
1 <= x <= 1000Filter results to these warning types; when empty, all types are returned. Each value flags:
Formatting: tags/formatting are missing or invalid, or there are missing or redundant line breaksJoinTags: the tag count in a joined segment's translation does not match the sourceEmptyPairTags: a paired tag has no content between its opening and closing tagInconsistentTagContent: the same tag holds different content across repeated occurrences in the segmentEmptyTagContent: a tag's metadata content is empty when it should not beNestedTags: a tag is nested in the wrong position relative to its sibling tags (missing/misplaced tags)Malformed: the segment's tag markup is malformed and could not be parsedMissingNumbersV3: a number present in the source is missing from the translationExtraNumbersV3: the translation contains a number not present in the sourceNonConformingTerm: the translated term does not match the assigned term base entryForbiddenTerm: the translation uses a term marked forbidden in the term baseSpellCheck: the translation contains a misspelled wordForbiddenString: the translation contains a string prohibited for the projectTranslationLength: the target length is outside the range configured in the project's target-length settingsAbsoluteLength: the target length exceeds the absolute character limit configured for target lengthRelativeLength: the target length is outside the percentage limit (vs. source length) configured for target lengthMultipleSpacesV3: the translation has consecutive spaces the source does not haveLeadingAndTrailingSpaces: the translation has extra or missing whitespace at its start or endRepeatedWord: a word is repeated consecutively in the translationUnresolvedComment: the segment has an unresolved commentUnresolvedConversation: the segment has an unresolved LQA conversationInconsistentTranslationTargetSource: the same translation is used for different source segmentsInconsistentTranslationSourceTarget: the same source text is translated inconsistently across segmentsTargetSourceIdentical: the translation is identical to the source text
100EmptyTranslation, TrailingPunctuation, Formatting, JoinTags, MissingNumbersV3, MultipleSpacesV3, NonConformingTerm, NotConfirmed, TranslationLength, AbsoluteLength, RelativeLength, UnresolvedComment, EmptyPairTags, InconsistentTranslationTargetSource, InconsistentTranslationSourceTarget, ForbiddenString, SpellCheck, RepeatedWord, InconsistentTagContent, EmptyTagContent, Malformed, ForbiddenTerm, NewerAtLowerLevel, LeadingAndTrailingSpaces, LeadingSpaces, TrailingSpaces, TargetSourceIdentical, SourceOrTargetRegexp, UnmodifiedFuzzyTranslation, UnmodifiedFuzzyTranslationTM, UnmodifiedFuzzyTranslationMTNT, Moravia, ExtraNumbersV3, UnresolvedConversation, NestedTags, FuzzyInconsistencyTargetSource, FuzzyInconsistencySourceTarget, CustomQA, MissingNonTranslatableAnnotation Was this page helpful?