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 |
Security
UrlsUrlIsMalformed
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url has expected variables |
Example Validation Report
{
"code": "VALIDATION__UrlsUrlIsMalformed",
"message": "URL is malformed",
"severity": "VIOLATION",
"details": {
"createdDate": "2026-09-01T21:00:59.865Z",
"submitted": [
{
"field": "$.brandDetails.urls[0].url",
"value": "http://www.exam ple.com"
}
],
"compared": [],
"expected": []
}
}
UrlsUrlIsNotParseable
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url is parseable |
Example Validation Report
{
"code": "VALIDATION__UrlsUrlIsNotParseable",
"message": "URL is not parseable",
"severity": "VIOLATION",
"details": {
"createdDate": "2026-09-01T21:00:59.865Z",
"submitted": [
{
"field": "$.brandDetails.urls[0].url",
"value": "httpsexamplecom/page"
}
],
"compared": [],
"expected": []
}
}
UrlsUrlIncludesUnsupportedFragment
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url does not include an unsupported fragment |
Example Validation Report
{
"code": "VALIDATION__UrlsUrlIncludesUnsupportedFragment",
"message": "URL includes unsupported fragment",
"severity": "VIOLATION",
"details": {
"createdDate": "2026-09-01T21:00:59.865Z",
"submitted": [
{
"field": "$.brandDetails.urls[0].url",
"value": "https://example.com/page#unsupportedfragment"
}
],
"compared": [],
"expected": []
}
}
UrlsUrlProtocolIsNotSupported
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that the url protocol is https or http |
Example Validation Report
{
"code": "VALIDATION__UrlsUrlProtocolIsNotSupported",
"message": "Protocol must be `https` or `http`",
"severity": "VIOLATION",
"details": {
"createdDate": "2026-09-01T21:00:59.865Z",
"submitted": [
{
"field": "$.brandDetails.urls[0].url",
"value": "ftp://public.ftp-servers.example.com/mydirectory/myfile.txt"
}
],
"compared": [],
"expected": []
}
}
UrlsUrlPortNumberIsNotSupported
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that the port number is in the range 1 to 65535 |
Example Validation Report
{
"code": "VALIDATION__UrlsUrlPortNumberIsNotSupported",
"message": "Port number must be in range 1 to 65535",
"severity": "VIOLATION",
"details": {
"createdDate": "2026-09-01T21:00:59.865Z",
"submitted": [
{
"field": "$.brandDetails.urls[0].url",
"value": "https://example.com/page"
}
],
"compared": [],
"expected": []
}
}
UrlsUrlDomainOrAddressIsNotSupported
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that the hostname is an FQDN, or IPv4 or IPv6 address |
Example Validation Report
{
"code": "VALIDATION__UrlsUrlDomainOrAddressIsNotSupported",
"message": "Hostname must be FQDN, or IPv4 or IPv6 address",
"severity": "VIOLATION",
"details": {
"createdDate": "2026-09-01T21:00:59.865Z",
"submitted": [
{
"field": "$.brandDetails.urls[0].url",
"value": "https://example_page.com"
}
],
"compared": [],
"expected": []
}
}
UrlsUrlFQDNHostnameIsNotResolvable
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that an FQDN hostname is resolvable |
Example Validation Report
{
"code": "VALIDATION__UrlsUrlFQDNHostnameIsNotResolvable",
"message": "FQDN hostname is not resolvable",
"severity": "VIOLATION",
"details": {
"createdDate": "2026-09-01T21:00:59.865Z",
"submitted": [
{
"field": "$.brandDetails.urls[0].url",
"value": "https://example_page.com"
}
],
"compared": [],
"expected": []
}
}
UrlsUrlIPAddressIsNotSupported
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that the resolved IP or the IP within the hostname is supported |
Example Validation Report
{
"code": "VALIDATION__UrlsUrlIPAddressIsNotSupported",
"message": "IP Address is not supported",
"severity": "VIOLATION",
"details": {
"createdDate": "2026-09-01T21:00:59.865Z",
"submitted": [
{
"field": "$.brandDetails.urls[0].url",
"value": "https://example_page.com"
}
],
"compared": [],
"expected": []
}
}
UrlsUrlContentExceedsMaxFileSize
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that content byte size does not exceed threshold |
Example Validation Report
{
"code": "VALIDATION__UrlsUrlContentExceedsMaxFileSize",
"message": "Content exceeds maximum allowed size",
"severity": "VIOLATION",
"details": {
"createdDate": "2026-09-01T21:00:59.865Z",
"submitted": [
{
"field": "$.brandDetails.urls[0].url",
"value": "https://example.com/page"
}
],
"compared": [],
"expected": []
}
}
UrlsUrlContentNotDownloadedSuccessfully
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that content is downloaded successfully and that content byte size does not exceed threshold |
Example Validation Report
{
"code": "VALIDATION__UrlsUrlContentNotDownloadedSuccessfully",
"message": "Content could not be downloaded. Or, downloaded content exceeds maximum allowed size",
"severity": "VIOLATION",
"details": {
"createdDate": "2026-09-01T21:00:59.865Z",
"submitted": [
{
"field": "$.brandDetails.urls[0].url",
"value": "https://example.com/page"
}
],
"compared": [],
"expected": []
}
}
UrlsUrlContentMimeTypeNotSupported
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that MIME type is valid and supported |
Example Validation Report
{
"code": "VALIDATION__UrlsUrlContentMimeTypeNotSupported",
"message": "Content MIME type is invalid or unsupported",
"severity": "VIOLATION",
"details": {
"createdDate": "2026-09-01T21:00:59.865Z",
"submitted": [
{
"field": "$.brandDetails.urls[0].url",
"value": "https://example.com/page"
}
],
"compared": [],
"expected": []
}
}
UrlsUrlContentMimeTypeDiscrepancy
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that content's detected MIME type matches the expected MIME type |
Example Validation Report
{
"code": "VALIDATION__UrlsUrlContentMimeTypeDiscrepancy",
"message": "Detected MIME type does not match expected MIME type",
"severity": "VIOLATION",
"details": {
"createdDate": "2026-09-01T21:00:59.865Z",
"submitted": [
{
"field": "$.brandDetails.urls[0].url",
"value": "https://example.com/page"
}
],
"compared": [],
"expected": []
}
}
UrlsUrlContentFailedVirusScan
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that content passes a virus scan check |
Example Validation Report
{
"code": "VALIDATION__UrlsUrlContentFailedVirusScan",
"message": "Content failed virus scan",
"severity": "VIOLATION",
"details": {
"createdDate": "2026-09-01T21:00:59.865Z",
"submitted": [
{
"field": "$.brandDetails.urls[0].url",
"value": "https://example.com/page"
}
],
"compared": [],
"expected": []
}
}
UrlsUrlMustPassUrlScan
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url passes security checks not covered by the rules above |
{{reason}} |
|---|
INTERNAL_SERVER_ERROR |
Example Validation Report
{
"code": "VALIDATION__UrlsUrlMustPassUrlScan",
"message": "URL rejected for reason: '{{reason}}'",
"severity": "VIOLATION",
"context": {
"reason": "INTERNAL_SERVER_ERROR"
},
"details": {
"createdDate": "2026-09-01T21:00:59.865Z",
"submitted": [
{
"field": "$.brandDetails.urls[0].url",
"value": "https://example.com/page"
}
],
"compared": [],
"expected": []
}
}