Skip to main content

Review localization validation rules for language support, locale requirements, and content adaptation

Locale​

LocaleMustBeDistinct​

Preconditions
reviewDetails.localizedReviews[].locale is present
DefinitionSeverityAPISampleMode
Validate that all locale values (review locale and all localized review locale values) are distinct
VIOLATION
POST_AND_PUT
S
Example Validation Report
{
"code": "VALIDATION__LocaleMustBeDistinct",
"severity": "VIOLATION",
"message": "'Locale' value '{{value}}' is not distinct",
"context": {
"value": "en"
},
"details": {
"createdDate": "2026-04-01T21:00:59.865Z",
"submitted": [
{
"field": "$.reviewDetails.localizedReviews[0].locale",
"value": "en"
}
],
"compared": [],
"expected": []
}
}

Localized Reviews​

LocalizedReviewsMustNotBeEmptyArray​

DefinitionSeverityAPISampleMode
Validate that localizedReviews is not an empty array
VIOLATION
POST_AND_PUT
S
Example Validation Report
{
"code": "VALIDATION__LocalizedReviewsMustNotBeEmptyArray",
"message": "'{{field}}' must be omitted or contain at least one element; empty arrays are not allowed.",
"severity": "VIOLATION",
"context": {
"field": "localizedReviews"
},
"details": {
"compared": [],
"expected": [],
"submitted": [
{
"field": "$.reviewDetails.localizedReviews",
"value": "[]"
}
],
"createdDate": "2026-03-03T13:58:43.946Z"
}
}

LocalizedReviewsListMustNotIncludeNulls​

DefinitionSeverityAPISampleMode
Validate that a list does not include null
VIOLATION
POST_AND_PUT
S

CountOfLocalizedReviewsExceedsThreshold​

DefinitionSeverityAPISampleMode
Validate that the count of localizedReviews values in a list does not exceed one hundred seventy-eight (178)
VIOLATION
POST_AND_PUT
S

LocalizedReviewsNotExpectedForReviewType​

Preconditions
type is USER
DefinitionSeverityAPISampleMode
Validate that localizedReviews is not present
VIOLATION
POST_AND_PUT
S

LocalizedReviewsLocaleMustBePresent​

Preconditions
localizedReviews is present
DefinitionSeverityAPISampleMode
Validate that locale is present
VIOLATION
POST_AND_PUT
Link
S

LocalizedReviewsLocaleNotSupported​

Preconditions
Primary language tag is valid
Region subtag is valid
DefinitionSeverityAPISampleMode
Validate that a locale is supported
VIOLATION
POST_AND_PUT
S
Example Validation Report
{
"code": "VALIDATION__LocalizedReviewsLocaleNotSupported",
"severity": "VIOLATION",
"message": "No supported '{{locale}}' is present",
"context": {
"locale": "en-BE"
},
"details": {
"createdDate": "2026-04-01T21:00:59.865Z",
"submitted": [
{
"field": "$.reviewDetails.localizedReviews[0].locale",
"value": "en-BE"
}
],
"compared": [],
"expected": []
}
}

LocalizedReviewsLocaleMustNotBeEmpty​

DefinitionSeverityAPISampleMode
Validate that locale is not an empty string
VIOLATION
POST_AND_PUT
S

LocalizedReviewLangTagMustBeValidISO639Code​

DefinitionSeverityAPISampleMode
Validate that the primary language tag is a valid, supported ISO 639 code
VIOLATION
POST_AND_PUT
S
Example Validation Report
{
"code": "VALIDATION__LocalizedReviewLangTagMustBeValidISO639Code",
"severity": "VIOLATION",
"message": "Primary language tag component of '{{value}}' in 'locale' is invalid or not supported",
"context": {
"value": "eng"
},
"details": {
"createdDate": "2026-04-01T21:00:59.865Z",
"submitted": [
{
"field": "$.reviewDetails.localizedReviews[0].locale",
"value": "eng"
}
],
"compared": [],
"expected": []
}
}

LocalizedReviewRegionMustBeValidISO3166Code​

DefinitionSeverityAPISampleMode
Validate that a region subtag is a valid, supported ISO 3166-1 code
VIOLATION
POST_AND_PUT
S
Example Validation Report
{
"code": "VALIDATION__LocalizedReviewRegionMustBeValidISO3166Code",
"severity": "VIOLATION",
"message": "Region subtag component of '{{value}}' in 'locale' is invalid or not supported",
"context": {
"value": "en-001"
},
"details": {
"createdDate": "2026-04-01T21:00:59.865Z",
"submitted": [
{
"field": "$.reviewDetails.localizedReviews[0].locale",
"value": "eng-001"
}
],
"compared": [],
"expected": []
}
}

LocalizedReviewScriptMustBeValidISO15924Code​

DefinitionSeverityAPISampleMode
Validate that the script subtag is a valid, supported ISO 15924 code
VIOLATION
POST_AND_PUT
S
Example Validation Report
{
"code": "VALIDATION__LocalizedReviewScriptMustBeValidISO15924Code",
"severity": "VIOLATION",
"message": "Script subtag component of '{{value}}' in 'locale' is invalid or not supported",
"context": {
"value": "ar-Arab-AE"
},
"details": {
"createdDate": "2026-04-01T21:00:59.865Z",
"submitted": [
{
"field": "$.reviewDetails.localizedReviews[0].locale",
"value": "ar-Arab-AE"
}
],
"compared": [],
"expected": []
}
}

Name​

LocalizedReviewsNameMustNotBeDummyCharacters​

DefinitionSeverityAPISampleMode
Validate that name is not dummy characters
VIOLATION
POST_AND_PUT
Link
S
Example Validation Report
{
"code": "VALIDATION__LocalizedReviewsNameMustNotBeDummyCharacters",
"message": "'{{field}}' value must not be dummy characters",
"severity": "VIOLATION",
"context": {
"field": "name"
},
"details": {
"createdDate": "2026-04-01T21:00:59.865Z",
"submitted": [
{
"field": "$.reviewDetails.localizedReviews[0].name",
"value": "0"
}
],
"compared": [],
"expected": []
}
}

LocalizedReviewsNameMustNotBeEmpty​

DefinitionSeverityAPISampleMode
Validate that name is not an empty string
VIOLATION
POST_AND_PUT
S
Example Validation Report
{
"code": "VALIDATION__LocalizedReviewsNameMustNotBeEmpty",
"severity": "VIOLATION",
"message": "'{{field}}' must not be empty string",
"context": {
"field": "name"
},
"details": {
"createdDate": "2026-04-01T21:00:59.865Z",
"submitted": [],
"compared": [],
"expected": []
}
}

LocalizedReviewsNameIsEntirelyNumeric​

DefinitionSeverityAPISampleMode
Validate that name is not entirely numeric
WARNING
POST_AND_PUT
S

LocalizedReviewsNameMustNotIncludeURL​

DefinitionSeverityAPISampleMode
Validate that name does not include a URL
VIOLATION
POST_AND_PUT
Link
S
Example Validation Report
{
"code": "VALIDATION__LocalizedReviewsNameMustNotIncludeURL",
"severity": "VIOLATION",
"message": "'{{field}}' value must not include URL",
"context": {
"field": "name"
},
"details": {
"createdDate": "2026-04-10T11:36:02.00Z",
"submitted": [
{
"field": "$.reviewDetails.localizedReviews[0].name",
"value": "Check this out! https://www.example.com"
}
],
"compared": [],
"expected": []
}
}

LocalizedReviewsNameMustNotExceedMaximum​

DefinitionSeverityAPISampleMode
Validate that name length does not exceed a maximum value (255)
VIOLATION
POST_AND_PUT
Link
S

LocalizedReviewsNameMustNotIncludeVulgarWord​

DefinitionSeverityAPISampleMode
Validate that name does not include a vulgar word
VIOLATION
POST_AND_PUT
A
Example Validation Report
{
"code": "VALIDATION__LocalizedReviewsNameMustNotIncludeVulgarWord",
"severity": "VIOLATION",
"message": "'name' includes localized or universally vulgar words: '{{vulgarWords}}'",
"context": {
"vulgarWords": ["xxxx"]
},
"details": {
"createdDate": "2026-04-01T21:00:59.865Z",
"submitted": [],
"compared": [],
"expected": []
}
}

Partners Resource URL​

LocalizedReviewsResourceUrlMustHaveValidFormat​

DefinitionSeverityAPISampleMode
Validate that a review's partnersResourceUrl has valid formatting
VIOLATION
POST_AND_PUT
Link
S

LocalizedReviewsResourceUrlMustNotBeEmpty​

DefinitionSeverityAPISampleMode
Validate that partnersResourceUrl is not an empty string
VIOLATION
POST_AND_PUT
S

LocalizedReviewsResourceUrlLengthMustNotExceedMaximum​

DefinitionSeverityAPISampleMode
Validate that partnersResourceUrl length does not exceed a maximum value (255)
VIOLATION
POST_AND_PUT
Link
S

LocalizedReviewsResourceUrlsMatch​

Preconditions
More than one (1) reviewDetails.localizedReviews[].partnersResourceUrl are present
DefinitionSeverityAPISampleMode
Validate that each localized review's partnersResourceUrl is distinct
WARNING
POST_AND_PUT
S

Review Body​

LocalizedReviewsBodyIsMatched​

Preconditions
locale language tag component is distinct (region subtag, if present, is ignored)
DefinitionSeverityAPISampleMode
Validate that reviewBody does not match another listed reviewBody
VIOLATION
POST_AND_PUT
S

LocalizedReviewsBodyMustBePresent​

Preconditions
localizedReviews is present
DefinitionSeverityAPISampleMode
Validate that reviewBody is present
VIOLATION
POST_AND_PUT
Link
S

LocalizedReviewsBodyMustNotBeDummyCharacters​

DefinitionSeverityAPISampleMode
Validate that reviewBody is not dummy characters
VIOLATION
POST_AND_PUT
Link
S
Example Validation Report
{
"code": "VALIDATION__LocalizedReviewsBodyMustNotBeDummyCharacters",
"message": "'{{field}}' value must not be dummy characters",
"severity": "VIOLATION",
"context": {
"field": "reviewBody"
},
"details": {
"createdDate": "2026-04-01T21:00:59.865Z",
"submitted": [
{
"field": "$.reviewDetails.localizedReviews[0].reviewBody",
"value": "0"
}
],
"compared": [],
"expected": []
}
}

LocalizedReviewsBodyMustNotBeEmpty​

DefinitionSeverityAPISampleMode
Validate that reviewBody is not an empty string
VIOLATION
POST_AND_PUT
S
Example Validation Report
{
"code": "VALIDATION__LocalizedReviewsBodyMustNotBeEmpty",
"severity": "VIOLATION",
"message": "'{{field}}' must not be empty string",
"context": {
"field": "reviewBody"
},
"details": {
"createdDate": "2026-04-01T21:00:59.865Z",
"submitted": [],
"compared": [],
"expected": []
}
}

LocalizedReviewsBodyMustNotBeEntirelyNumeric​

DefinitionSeverityAPISampleMode
Validate that the reviewBody is not entirely numeric
WARNING
POST_AND_PUT
S

LocalizedReviewsBodyMustNotIncludeURL​

DefinitionSeverityAPISampleMode
Validate that reviewBody does not include a URL
VIOLATION
POST_AND_PUT
Link
S
Example Validation Report
{
"code": "VALIDATION__LocalizedReviewsBodyMustNotIncludeURL",
"severity": "VIOLATION",
"message": "'{{field}}' value must not include URL",
"context": {
"field": "reviewBody"
},
"details": {
"createdDate": "2026-04-10T11:36:02.00Z",
"submitted": [
{
"field": "$.reviewDetails.localizedReviews[0].reviewBody",
"value": "View the full review at https://www.example.com"
}
],
"compared": [],
"expected": []
}
}

LocalizedReviewsBodyMustNotExceedMaximum​

DefinitionSeverityAPISampleMode
Validate that reviewBody length does not exceed a maximum value (20,000)
VIOLATION
POST_AND_PUT
Link
S

LocalizedReviewsBodyMustNotIncludeVulgarWord​

DefinitionSeverityAPISampleMode
Validate that reviewBody does not include a vulgar word
VIOLATION
POST_AND_PUT
A
Example Validation Report
{
"code": "VALIDATION__LocalizedReviewsBodyMustNotIncludeVulgarWord",
"severity": "VIOLATION",
"message": "'reviewBody' includes localized or universally vulgar words: '{{vulgarWords}}'",
"context": {
"vulgarWords": ["xxxx"]
},
"details": {
"createdDate": "2026-04-01T21:00:59.865Z",
"submitted": [],
"compared": [],
"expected": []
}
}

LocalizedReviewsBodyDuplicatesName​

Preconditions
name is present
DefinitionSeverityAPISampleMode
Validate that the reviewBody is not a duplicate of name
VIOLATION
POST_AND_PUT
S

Security​

LocalizedReviewsResourceUrlMustPassUrlScan​

DefinitionSeverityAPISampleMode
Validate that partnersResourceUrl passes security checks
VIOLATION
POST_AND_PUT
i/o
{{reason}}
malformed
not parsable
only http or https schemes accepted
port not within expected range
hostname is neither FQDN, IP v4 nor IP v6
does not resolve to accepted IP address version (v4 or v6)
does not resolve to accepted IP address
file size exceeds maximum
failed to download
unrecognizable MIME type
unexpected content for MIME type
failed virus scan
note

Validation report may be delivered synchronously or asynchronously, depending upon the mode of execution of the specific check

Example Validation Report
{
"code": "VALIDATION__LocalizedReviewsResourceUrlMustPassUrlScan",
"message": "URL rejected for reason: '{{reason}}'",
"severity": "VIOLATION",
"context": {
"reason": "only http or https schemes accepted"
},
"details": {
"createdDate": "2026-09-01T21:00:59.865Z",
"submitted": [
{
"field": "$.reviewDetails.localizedReviews[0].partnersResourceUrl",
"value": "ftp://www.example.com/hotels/somewhere/hotel-review"
}
],
"compared": [],
"expected": []
}
}

Unsupported Characters​

LocalizedReviewsNameHasUnsupportedCharacter​

DefinitionSeverityAPISampleMode
Validate that name does not include an unsupported character
VIOLATION
POST_AND_PUT
Link
S

LocalizedReviewsBodyHasUnsupportedCharacter​

DefinitionSeverityAPISampleMode
Validate that reviewBody does not include an unsupported character
VIOLATION
POST_AND_PUT
Link
S

Partners Resource URL​

ReviewsResourceUrlMustHaveValidFormat​

DefinitionSeverityAPISampleMode
Validate that a review's partnersResourceUrl has valid formatting
VIOLATION
POST_AND_PUT
Link
S

ReviewsResourceUrlMustNotBeEmpty​

DefinitionSeverityAPISampleMode
Validate that partnersResourceUrl is not an empty string
VIOLATION
POST_AND_PUT
S

ReviewsResourceUrlMustNotBePresent​

Preconditions
Review type is USER
DefinitionSeverityAPISampleMode
Validate that partnersResourceUrl is not present
VIOLATION
POST_AND_PUT
Link
S

ReviewsResourceUrlLengthMustNotExceedMaximum​

DefinitionSeverityAPISampleMode
Validate that partnersResourceUrl length does not exceed a maximum value (255)
VIOLATION
POST_AND_PUT
Link
S

Security​

ReviewsResourceUrlMustPassUrlScan​

DefinitionSeverityAPISampleMode
Validate that partnersResourceUrl passes security checks
VIOLATION
POST_AND_PUT
{{reason}}
malformed
not parsable
only http or https schemes accepted
port not within expected range
hostname is neither FQDN, IP v4 nor IP v6
does not resolve to accepted IP address version (v4 or v6)
does not resolve to accepted IP address
file size exceeds maximum
failed to download
unrecognizable MIME type
unexpected content for MIME type
failed virus scan
note

Validation report may be delivered synchronously or asynchronously, depending upon the mode of execution of the specific check

Example Validation Report
{
"code": "VALIDATION__ReviewsResourceUrlMustPassUrlScan",
"message": "URL rejected for reason: '{{reason}}'",
"severity": "VIOLATION",
"context": {
"reason": "only http or https schemes accepted"
},
"details": {
"createdDate": "2026-09-01T21:00:59.865Z",
"submitted": [
{
"field": "$.reviewDetails.review.partnersResourceUrl",
"value": "ftp://www.example.com/hotels/somewhere/hotel-review"
}
],
"compared": [],
"expected": []
}
}