Review localization validation rules for language support, locale requirements, and content adaptation
Locale
LocaleMustBeDistinct
| Preconditions |
|---|
reviewDetails.localizedReviews[].locale is present |
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that all locale values (review locale and all localized review locale values) are distinct |
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
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that localizedReviews is not an empty array |
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
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that a list does not include null |
CountOfLocalizedReviewsExceedsThreshold
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that the count of localizedReviews values in a list does not exceed one hundred seventy-eight (178) |
LocalizedReviewsNotExpectedForReviewType
| Preconditions |
|---|
type is USER |
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that localizedReviews is not present |
LocalizedReviewsLocaleMustBePresent
| Preconditions |
|---|
localizedReviews is present |
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that locale is present | Link |
LocalizedReviewsLocaleNotSupported
| Preconditions |
|---|
| Primary language tag is valid |
| Region subtag is valid |
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that a locale is supported |
Example Validation Report
{
"code": "VALIDATION__LocalizedReviewsLocaleNotSupported",
"severity": "VIOLATION",
"message": "'{{field}}' value '{{value}}' is not supported",
"context": {
"field": "locale",
"value": "en-BE"
},
"details": {
"createdDate": "2026-04-01T21:00:59.865Z",
"submitted": [
{
"field": "$.reviewDetails.localizedReviews[0].locale",
"value": "en-BE"
}
],
"compared": [],
"expected": []
}
}
LocalizedReviewsLocaleMustNotBeEmpty
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that locale is not an empty string |
LangTagMustBeValidISO639Code
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that the primary language tag is a valid, supported ISO 639 code |
Example Validation Report
{
"code": "VALIDATION__LangTagMustBeValidISO639Code",
"severity": "VIOLATION",
"message": "Primary language tag component of '{{value}}' in '{{field}}' is invalid or not supported",
"context": {
"field": "locale",
"value": "eng"
},
"details": {
"createdDate": "2026-04-01T21:00:59.865Z",
"submitted": [
{
"field": "$.reviewDetails.localizedReviews[0].locale",
"value": "eng"
}
],
"compared": [],
"expected": []
}
}
RegionMustBeValidISO3166Code
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that a region subtag is a valid, supported ISO 3166-1 code |
Example Validation Report
{
"code": "VALIDATION__RegionMustBeValidISO3166Code",
"severity": "VIOLATION",
"message": "Region subtag component of '{{value}}' in '{{field}}' is invalid or not supported",
"context": {
"field": "locale",
"value": "en-001"
},
"details": {
"createdDate": "2026-04-01T21:00:59.865Z",
"submitted": [
{
"field": "$.reviewDetails.localizedReviews[0].locale",
"value": "eng-001"
}
],
"compared": [],
"expected": []
}
}
ScriptMustBeValidISO15924Code
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that the script subtag is a valid, supported ISO 15924 code |
Example Validation Report
{
"code": "VALIDATION__ScriptMustBeValidISO15924Code",
"severity": "VIOLATION",
"message": "Script subtag component of '{{value}}' in '{{field}}' is invalid or not supported",
"context": {
"field": "locale",
"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
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that name is not dummy characters | Link |
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
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that name is not an empty string |
Example Validation Report
{
"code": "VALIDATION__LocalizedReviewsNameMustNotBeEmpty",
"severity": "VIOLATION",
"message": "'name' must not be empty string"
}
LocalizedReviewsNameIsEntirelyNumeric
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that name is not entirely numeric |
LocalizedReviewsNameMustNotIncludeURL
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that name does not include a URL | Link |
Example Validation Report
{
"code": "VALIDATION__LocalizedReviewsNameMustNotIncludeURL",
"severity": "VIOLATION",
"message": "'{{field}}' is '{{value}}' and includes URL",
"context": {
"field": "name",
"value": "Check this out! https://www.example.com"
},
"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
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that name length does not exceed a maximum value (255) | Link |
LocalizedReviewsNameMustNotIncludeVulgarWord
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that name does not include a vulgar word |
Example Validation Report
{
"code": "VALIDATION__LocalizedReviewsNameMustNotIncludeVulgarWord",
"severity": "VIOLATION",
"message": "'{{field}}' includes localized or universally vulgar words: '{{vulgarWords}}'",
"context": {
"field": "name",
"vulgarWords": [ "value1", "value2" ]
}
}
Partners Resource URL
LocalizedReviewsResourceUrlMustHaveValidFormat
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that a review's partnersResourceUrl has valid formatting | Link |
LocalizedReviewsResourceUrlMustNotBeEmpty
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that partnersResourceUrl is not an empty string |
LocalizedReviewsResourceUrlLengthMustNotExceedMaximum
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that partnersResourceUrl length does not exceed a maximum value (255) | Link |
LocalizedReviewsResourceUrlsMatch
| Preconditions |
|---|
More than one (1) reviewDetails.localizedReviews[].partnersResourceUrl are present |
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that each localized review's partnersResourceUrl is distinct |
Review Body
LocalizedReviewsBodyIsMatched
| Preconditions |
|---|
locale language tag component is distinct (region subtag, if present, is ignored) |
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that reviewBody does not match another listed reviewBody |
LocalizedReviewsBodyMustBePresent
| Preconditions |
|---|
localizedReviews is present |
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that reviewBody is present | Link |
LocalizedReviewsBodyMustNotBeDummyCharacters
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that reviewBody is not dummy characters | Link |
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
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that reviewBody is not an empty string |
Example Validation Report
{
"code": "VALIDATION__LocalizedReviewsBodyMustNotBeEmpty",
"severity": "VIOLATION",
"message": "'reviewBody' must not be empty string"
}
LocalizedReviewsBodyMustNotBeEntirelyNumeric
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that the reviewBody is not entirely numeric |
LocalizedReviewsBodyMustNotIncludeURL
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that reviewBody does not include a URL | Link |
Example Validation Report
{
"code": "VALIDATION__LocalizedReviewsBodyMustNotIncludeURL",
"severity": "VIOLATION",
"message": "'{{field}}' is '{{value}}' and includes URL",
"context": {
"field": "reviewBody",
"value": "View the full review at https://www.example.com"
},
"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
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that reviewBody length does not exceed a maximum value (20,000) | Link |
LocalizedReviewsBodyMustNotIncludeVulgarWord
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that reviewBody does not include a vulgar word |
Example Validation Report
{
"code": "VALIDATION__LocalizedReviewsBodyMustNotIncludeVulgarWord",
"severity": "VIOLATION",
"message": "'{{field}}' includes localized or universally vulgar words: '{{vulgarWords}}'",
"context": {
"field": "reviewBody",
"vulgarWords": [ "value1", "value2" ]
}
}
LocalizedReviewsBodyDuplicatesName
| Preconditions |
|---|
name is present |
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that the reviewBody is not a duplicate of name |
Security
LocalizedReviewsResourceUrlMustPassUrlScan
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that partnersResourceUrl passes security checks | 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__PartnersResourceUrlMustPassUrlScan",
"message": "'partnersResourceUrl' 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
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that name does not include an unsupported character | Link |
LocalizedReviewsBodyHasUnsupportedCharacter
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that reviewBody does not include an unsupported character | Link |
Partners Resource URL
ReviewsResourceUrlMustHaveValidFormat
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that a review's partnersResourceUrl has valid formatting | Link |
ReviewsResourceUrlMustNotBeEmpty
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that partnersResourceUrl is not an empty string |
ReviewsResourceUrlMustNotBePresent
| Preconditions |
|---|
Review type is USER |
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that partnersResourceUrl is not present | Link |
ReviewsResourceUrlLengthMustNotExceedMaximum
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that partnersResourceUrl length does not exceed a maximum value (255) | Link |
Security
ReviewsResourceUrlMustPassUrlScan
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that partnersResourceUrl passes security checks |
{{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__PartnersResourceUrlMustPassUrlScan",
"message": "'partnersResourceUrl' 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": []
}
}