Validation rules for photo URLs including format validation, change detection, UTM parameters, and length restrictions
Change Detection
PhotosThumbnailMustNotBeUpdated
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that all of following are unchanged among versions: url, pixelHeight and pixelWidth |
PhotosSmallMustNotBeUpdated
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that all of following are unchanged among versions: url, pixelHeight and pixelWidth |
PhotosMediumMustNotBeUpdated
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that all of following are unchanged among versions: url, pixelHeight and pixelWidth |
PhotosLargeMustNotBeUpdated
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that all of following are unchanged among versions: url, pixelHeight and pixelWidth |
PhotosXLargeMustNotBeUpdated
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that all of following are unchanged among versions: url, pixelHeight and pixelWidth |
PhotosXXLargeMustNotBeUpdated
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that all of following are unchanged among versions: url, pixelHeight and pixelWidth |
PhotosOriginalMustNotBeUpdated
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that all of following are unchanged among versions: url, pixelHeight and pixelWidth |
ImageIdMustNotBeUpdated
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that imageId is unchanged among versions |
SuspiciousRemovalOfCoordinates
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that coordinates are unchanged among versions |
Filename Extension
FilenameExtensionMustBeValid
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that filename at end of url is valid and entirely in lower case | Link |
URL
PhotosThumbnailURLMustBePresent
| Preconditions |
|---|
thumbnail is present |
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url is present | Link |
PhotosSmallURLMustBePresent
| Preconditions |
|---|
small is present |
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url is present | Link |
PhotosMediumURLMustBePresent
| Preconditions |
|---|
medium is present |
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url is present | Link |
PhotosLargeURLMustBePresent
| Preconditions |
|---|
large is present |
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url is present | Link |
PhotosXLargeURLMustBePresent
| Preconditions |
|---|
xlarge is present |
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url is present | Link |
PhotosXXLargeURLMustBePresent
| Preconditions |
|---|
xxlarge is present |
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url is present | Link |
PhotosOriginalURLMustBePresent
| Preconditions |
|---|
original is present |
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url is present | Link |
PhotosThumbnailURLMustNotBeEmpty
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url is not an empty string |
PhotosSmallURLMustNotBeEmpty
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url is not an empty string |
PhotosMediumURLMustNotBeEmpty
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url is not an empty string |
PhotosLargeURLMustNotBeEmpty
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url is not an empty string |
PhotosXLargeURLMustNotBeEmpty
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url is not an empty string |
PhotosXXLargeURLMustNotBeEmpty
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url is not an empty string |
PhotosOriginalURLMustNotBeEmpty
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url is not an empty string |
PhotosThumbnailURLMustHaveValidFormat
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url value's format is valid |
PhotosSmallURLMustHaveValidFormat
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url value's format is valid |
PhotosMediumURLMustHaveValidFormat
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url value's format is valid |
PhotosLargeURLMustHaveValidFormat
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url value's format is valid |
PhotosXLargeURLMustHaveValidFormat
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url value's format is valid |
PhotosXXLargeURLMustHaveValidFormat
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url value's format is valid |
PhotosOriginalURLMustHaveValidFormat
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url value's format is valid |
PhotosThumbnailUrlMustNotIncludeUtmParameter
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url does not include UTM parameter(s) | Link |
PhotosSmallUrlMustNotIncludeUtmParameter
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url does include UTM parameter(s) | Link |
PhotosMediumUrlMustNotIncludeUtmParameter
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url does include UTM parameter(s) | Link |
PhotosLargeUrlMustNotIncludeUtmParameter
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url does include UTM parameter(s) | Link |
PhotosXLargeUrlMustNotIncludeUtmParameter
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url does include UTM parameter(s) | Link |
PhotosXXLargeUrlMustNotIncludeUtmParameter
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url does include UTM parameter(s) | Link |
PhotosOriginalUrlMustNotIncludeUtmParameter
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url does include UTM parameter(s) | Link |
PhotosThumbnailUrlLengthMustNotExceedMaximum
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url length does not exceed a maximum value (255) |
PhotosSmallUrlLengthMustNotExceedMaximum
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url length does not exceed a maximum value (255) |
PhotosMediumUrlLengthMustNotExceedMaximum
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url length does not exceed a maximum value (255) |
PhotosLargeUrlLengthMustNotExceedMaximum
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url length does not exceed a maximum value (255) |
PhotosXLargeUrlLengthMustNotExceedMaximum
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url length does not exceed a maximum value (255) |
PhotosXXLargeUrlLengthMustNotExceedMaximum
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url length does not exceed a maximum value (255) |
PhotosOriginalUrlLengthMustNotExceedMaximum
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that url length does not exceed a maximum value (255) |
UrlAccessOrPhotoDownloadFailure
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that a photo can be successfully accessed and downloaded from a URL |
| Access/Download Failure Reason |
|---|
| After multiple retry attempts, final attempt returns any of 404 Not Found, 409 Conflict, or 410 Gone HTTP Status |
| After multiple retry attempts, final attempt returns a non-standard error |
| After multiple retry attempts, final connection attempt is timed out |
| Photo size is greater than 20MB |
Example Validation Report
{
"code": "VALIDATION__UrlAccessOrPhotoDownloadFailure",
"severity": "VIOLATION",
"message": "Photo with Apple-generated '{{id}}' rejected. URL not accessible or photo download failure",
"context": {
"id": "9467895078742654976"
},
"details": {
"createdDate": "2026-02-10T11:36:02.000Z",
"compared": [],
"expected": [],
"submitted": []
}
}
PhotoDownloadTlsFailure
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that the photo URL is accessible over a valid TLS connection |
Example Validation Report
{
"code": "VALIDATION__PhotoDownloadTlsFailure",
"severity": "VIOLATION",
"message": "Photo with Apple-generated '{{id}}' rejected. TLS certificate verification failed for the photo URL. Ensure your server's certificate is valid and not expired.",
"context": {
"id": "9467895078742654976"
},
"details": {
"createdDate": "2026-02-10T11:36:02.000Z",
"compared": [],
"expected": [],
"submitted": []
}
}
PhotoDownloadDnsFailure
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that the domain in the photo URL resolves successfully |
Example Validation Report
{
"code": "VALIDATION__PhotoDownloadDnsFailure",
"severity": "VIOLATION",
"message": "Photo with Apple-generated '{{id}}' rejected. DNS resolution failed for the photo URL. Ensure the domain in your URL is correct and publicly reachable.",
"context": {
"id": "9467895078742654976"
},
"details": {
"createdDate": "2026-02-10T11:36:02.000Z",
"compared": [],
"expected": [],
"submitted": []
}
}
PhotoDownloadTimeout
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that the photo URL responds within the required time |
Example Validation Report
{
"code": "VALIDATION__PhotoDownloadTimeout",
"severity": "VIOLATION",
"message": "Photo with Apple-generated '{{id}}' rejected. The request to download the photo timed out. Ensure your photo host is publicly reachable and responding within the required time.",
"context": {
"id": "9467895078742654976"
},
"details": {
"createdDate": "2026-02-10T11:36:02.000Z",
"compared": [],
"expected": [],
"submitted": []
}
}
PhotoDownloadHttp4xxError
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that the photo URL does not return an HTTP 4xx client error |
Example Validation Report
{
"code": "VALIDATION__PhotoDownloadHttp4xxError",
"severity": "VIOLATION",
"message": "Photo with Apple-generated '{{id}}' rejected. The photo URL returned an HTTP 4xx error. Ensure the URL is correct and accessible without authentication.",
"context": {
"id": "9467895078742654976"
},
"details": {
"createdDate": "2026-02-10T11:36:02.000Z",
"compared": [],
"expected": [],
"submitted": []
}
}
PhotoDownloadHttp5xxError
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that the photo URL does not return an HTTP 5xx server error |
Example Validation Report
{
"code": "VALIDATION__PhotoDownloadHttp5xxError",
"severity": "VIOLATION",
"message": "Photo with Apple-generated '{{id}}' rejected. The photo URL returned an HTTP 5xx error. Check the availability of your photo host.",
"context": {
"id": "9467895078742654976"
},
"details": {
"createdDate": "2026-02-10T11:36:02.000Z",
"compared": [],
"expected": [],
"submitted": []
}
}
PhotoContentInvalid
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that the content downloaded from the photo URL is a valid, processable image |
Example Validation Report
{
"code": "VALIDATION__PhotoContentInvalid",
"severity": "VIOLATION",
"message": "Photo with Apple-generated '{{id}}' rejected. The downloaded file could not be processed. Ensure the URL points to a valid image in a supported format.",
"context": {
"id": "9467895078742654976"
},
"details": {
"createdDate": "2026-02-10T11:36:02.000Z",
"compared": [],
"expected": [],
"submitted": []
}
}