Validation rules for brand URLs including App Store validation, presence requirements, format checks, and UTM restrictions
URLs
AppStoreUrlMustBeValid
| Preconditions |
|---|
type is IOS_APP |
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that an App Store url is valid |
CountryCodeTopLevelDomainNotSupported
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that a URL's ccTLD corresponds with a supported country | Link |
note
In addition to the countries/regions listed in Unsupported Regions, Brand also rejects the cn (China) ccTLD.
Example Validation Report
{
"code": "VALIDATION__CountryCodeTopLevelDomainNotSupported",
"severity": "VIOLATION",
"message": "Support for 'url' value '{{value}}' not available",
"context": {
"value": "http://example.ru"
},
"details": {
"createdDate": "2026-10-10T21:00:59.865Z",
"submitted": [
{
"field": "$.brandDetails.urls[0].url",
"value": "http://example.ru"
}
],
"compared": [],
"expected": []
}
}
UrlsMustBePresent
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that urls is present (organization type OWNER or AGENCY) | Link | |||
Validate that urls is present (any other organization type) | Link |
UrlsUrlLengthMustNotExceedMaximum
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url length does not exceed a maximum value (255) | Link |
UrlsTypeMustBeDistinct
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that each type is distinct |
UrlsTypeMustBePresent
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that type is present | Link |
UrlsTypeMustBeValid
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that type value is valid | Link |
UrlsTypeMustNotBeEmpty
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that type is not an empty string |
UrlsUrlMustBePresent
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url is present | Link |
UrlsUrlMustHaveValidFormat
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url value's format is valid |
UrlsUrlMustNotBeEmpty
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url is not an empty string |
UrlsUrlMustNotIncludeUtmParameter
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url does include UTM parameter(s) | Link |
UrlsUrlMustPassUrlScan
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url passes security checks |
{{reason}} |
|---|
URL is malformed |
URL is not parseable |
URL includes unsupported fragment |
Protocol must be `https` or `http` |
Port number must be in range 1 to 65535 |
Hostname must be FQDN, or IPv4 or IPv6 address |
FQDN hostname is not resolvable |
IP Address is not supported |
Content exceeds maximum allowed size |
Content could not be downloaded. Or, downloaded content exceeds maximum allowed size |
Content MIME type is invalid or unsupported |
Content failed virus scan |
Example Validation Report
{
"code": "VALIDATION__UrlsUrlMustPassUrlScan",
"severity": "VIOLATION",
"message": "URL rejected for reason: '{{reason}}'",
"context": {
"reason": "Content failed virus scan"
},
"details": {
"createdDate": "2026-10-10T21:00:00.00Z",
"submitted": [
{
"field": "$.brandDetails.urls[0].url",
"value": "http://example.com/malware"
}
],
"compared": [],
"expected": []
}
}