curl --request POST \
--url https://eu.phrase.com/quality-evaluator/v3/evaluation \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: <content-type>' \
--data '
{
"contentGroupId": "cg-abc123",
"segments": [
{
"id": "segment-1",
"source": "Hello, world!",
"target": "Hallo, Welt!"
}
],
"sourceLocaleCode": "en_us",
"targetLocaleCode": "de_de"
}
'import requests
url = "https://eu.phrase.com/quality-evaluator/v3/evaluation"
payload = {
"contentGroupId": "cg-abc123",
"segments": [
{
"id": "segment-1",
"source": "Hello, world!",
"target": "Hallo, Welt!"
}
],
"sourceLocaleCode": "en_us",
"targetLocaleCode": "de_de"
}
headers = {
"Content-Type": "<content-type>",
"Authorization": "Bearer <token>"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': '<content-type>', Authorization: 'Bearer <token>'},
body: JSON.stringify({
contentGroupId: 'cg-abc123',
segments: [{id: 'segment-1', source: 'Hello, world!', target: 'Hallo, Welt!'}],
sourceLocaleCode: 'en_us',
targetLocaleCode: 'de_de'
})
};
fetch('https://eu.phrase.com/quality-evaluator/v3/evaluation', 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://eu.phrase.com/quality-evaluator/v3/evaluation",
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([
'contentGroupId' => 'cg-abc123',
'segments' => [
[
'id' => 'segment-1',
'source' => 'Hello, world!',
'target' => 'Hallo, Welt!'
]
],
'sourceLocaleCode' => 'en_us',
'targetLocaleCode' => 'de_de'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: <content-type>"
],
]);
$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://eu.phrase.com/quality-evaluator/v3/evaluation"
payload := strings.NewReader("{\n \"contentGroupId\": \"cg-abc123\",\n \"segments\": [\n {\n \"id\": \"segment-1\",\n \"source\": \"Hello, world!\",\n \"target\": \"Hallo, Welt!\"\n }\n ],\n \"sourceLocaleCode\": \"en_us\",\n \"targetLocaleCode\": \"de_de\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "<content-type>")
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://eu.phrase.com/quality-evaluator/v3/evaluation")
.header("Content-Type", "<content-type>")
.header("Authorization", "Bearer <token>")
.body("{\n \"contentGroupId\": \"cg-abc123\",\n \"segments\": [\n {\n \"id\": \"segment-1\",\n \"source\": \"Hello, world!\",\n \"target\": \"Hallo, Welt!\"\n }\n ],\n \"sourceLocaleCode\": \"en_us\",\n \"targetLocaleCode\": \"de_de\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://eu.phrase.com/quality-evaluator/v3/evaluation")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = '<content-type>'
request["Authorization"] = 'Bearer <token>'
request.body = "{\n \"contentGroupId\": \"cg-abc123\",\n \"segments\": [\n {\n \"id\": \"segment-1\",\n \"source\": \"Hello, world!\",\n \"target\": \"Hallo, Welt!\"\n }\n ],\n \"sourceLocaleCode\": \"en_us\",\n \"targetLocaleCode\": \"de_de\"\n}"
response = http.request(request)
puts response.read_body{
"contentGroupId": "cg-abc123",
"segments": [
{
"id": "segment-1",
"source": "Hello, world!",
"target": "Hallo, Welt!",
"results": [
{
"type": "AI_CHECK",
"ruleUid": "rule-abc123",
"evaluation": {
"isValid": true,
"explanation": "The translation uses standard German sentence structure."
}
}
]
}
]
}{
"type": "urn:problem-type:unauthorized",
"title": "Unauthorized",
"status": 401,
"detail": "Valid credentials were not supplied",
"instance": "<string>"
}{
"type": "urn:problem-type:unauthorized",
"title": "Unauthorized",
"status": 401,
"detail": "Valid credentials were not supplied"
}{
"type": "urn:problem-type:forbidden",
"title": "Forbidden",
"status": 403,
"detail": "Insufficient permissions to perform this action"
}{
"type": "urn:problem-type:unauthorized",
"title": "Unauthorized",
"status": 401,
"detail": "Valid credentials were not supplied",
"instance": "<string>"
}{
"type": "urn:problem-type:unauthorized",
"title": "Unauthorized",
"status": 401,
"detail": "Valid credentials were not supplied",
"instance": "<string>"
}Evaluate segments
Resolves the AI Checks (Style Guide Rules with AI Check enabled) that apply to the given Content Group and target locale, and evaluates every segment against each of them.
When no checks are associated with the Content Group, all segments are returned with an empty results array and no error is raised. Segments with an empty or blank target are not evaluated and are returned with an empty results array.
Requires ADMIN or OWNER IDM role.
curl --request POST \
--url https://eu.phrase.com/quality-evaluator/v3/evaluation \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: <content-type>' \
--data '
{
"contentGroupId": "cg-abc123",
"segments": [
{
"id": "segment-1",
"source": "Hello, world!",
"target": "Hallo, Welt!"
}
],
"sourceLocaleCode": "en_us",
"targetLocaleCode": "de_de"
}
'import requests
url = "https://eu.phrase.com/quality-evaluator/v3/evaluation"
payload = {
"contentGroupId": "cg-abc123",
"segments": [
{
"id": "segment-1",
"source": "Hello, world!",
"target": "Hallo, Welt!"
}
],
"sourceLocaleCode": "en_us",
"targetLocaleCode": "de_de"
}
headers = {
"Content-Type": "<content-type>",
"Authorization": "Bearer <token>"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': '<content-type>', Authorization: 'Bearer <token>'},
body: JSON.stringify({
contentGroupId: 'cg-abc123',
segments: [{id: 'segment-1', source: 'Hello, world!', target: 'Hallo, Welt!'}],
sourceLocaleCode: 'en_us',
targetLocaleCode: 'de_de'
})
};
fetch('https://eu.phrase.com/quality-evaluator/v3/evaluation', 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://eu.phrase.com/quality-evaluator/v3/evaluation",
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([
'contentGroupId' => 'cg-abc123',
'segments' => [
[
'id' => 'segment-1',
'source' => 'Hello, world!',
'target' => 'Hallo, Welt!'
]
],
'sourceLocaleCode' => 'en_us',
'targetLocaleCode' => 'de_de'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: <content-type>"
],
]);
$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://eu.phrase.com/quality-evaluator/v3/evaluation"
payload := strings.NewReader("{\n \"contentGroupId\": \"cg-abc123\",\n \"segments\": [\n {\n \"id\": \"segment-1\",\n \"source\": \"Hello, world!\",\n \"target\": \"Hallo, Welt!\"\n }\n ],\n \"sourceLocaleCode\": \"en_us\",\n \"targetLocaleCode\": \"de_de\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "<content-type>")
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://eu.phrase.com/quality-evaluator/v3/evaluation")
.header("Content-Type", "<content-type>")
.header("Authorization", "Bearer <token>")
.body("{\n \"contentGroupId\": \"cg-abc123\",\n \"segments\": [\n {\n \"id\": \"segment-1\",\n \"source\": \"Hello, world!\",\n \"target\": \"Hallo, Welt!\"\n }\n ],\n \"sourceLocaleCode\": \"en_us\",\n \"targetLocaleCode\": \"de_de\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://eu.phrase.com/quality-evaluator/v3/evaluation")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = '<content-type>'
request["Authorization"] = 'Bearer <token>'
request.body = "{\n \"contentGroupId\": \"cg-abc123\",\n \"segments\": [\n {\n \"id\": \"segment-1\",\n \"source\": \"Hello, world!\",\n \"target\": \"Hallo, Welt!\"\n }\n ],\n \"sourceLocaleCode\": \"en_us\",\n \"targetLocaleCode\": \"de_de\"\n}"
response = http.request(request)
puts response.read_body{
"contentGroupId": "cg-abc123",
"segments": [
{
"id": "segment-1",
"source": "Hello, world!",
"target": "Hallo, Welt!",
"results": [
{
"type": "AI_CHECK",
"ruleUid": "rule-abc123",
"evaluation": {
"isValid": true,
"explanation": "The translation uses standard German sentence structure."
}
}
]
}
]
}{
"type": "urn:problem-type:unauthorized",
"title": "Unauthorized",
"status": 401,
"detail": "Valid credentials were not supplied",
"instance": "<string>"
}{
"type": "urn:problem-type:unauthorized",
"title": "Unauthorized",
"status": 401,
"detail": "Valid credentials were not supplied"
}{
"type": "urn:problem-type:forbidden",
"title": "Forbidden",
"status": 403,
"detail": "Insufficient permissions to perform this action"
}{
"type": "urn:problem-type:unauthorized",
"title": "Unauthorized",
"status": 401,
"detail": "Valid credentials were not supplied",
"instance": "<string>"
}{
"type": "urn:problem-type:unauthorized",
"title": "Unauthorized",
"status": 401,
"detail": "Valid credentials were not supplied",
"instance": "<string>"
}Authorizations
Use a Bearer token obtained from Phrase Platform authentication. See the Authentication guide for details on how to obtain a token.
Headers
"application/json"
Body
Request to evaluate translation segments using the AI Checks resolved from a Content Group.
ID of the Content Group whose AI Checks are used for evaluation.
Segments to evaluate. Each segment id, when provided, must be unique within the request; duplicate ids result in a 400 Bad Request.
1 - 200 elementsShow child attributes
Show child attributes
Locale code compatible with Phrase locale format. Case-insensitive, supports both underscore and hyphen separators (e.g., en_us, en-US, de_de, fr_fr).
"en_us"
Locale code compatible with Phrase locale format. Case-insensitive, supports both underscore and hyphen separators (e.g., en_us, en-US, de_de, fr_fr).
"en_us"
Response
Evaluation completed successfully. Returns evaluated segments with per-check results.
Was this page helpful?