Validation rules for asset metadata including dates, IDs, quality checks, resource states, and source validation
Captured By
CapturedByMustNotBeDummyCharacters
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that capturedBy does not include dummy characters | Link |
| Dummy Characters List |
|---|
No name, No Name, no name, no Name, NO NAME, Unknown, unknown, UNKNOWN, No value, No Value |
CapturedByMustNotBeEmpty
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that capturedBy is not an empty string |
CapturedByHasUnsupportedCharacter
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that capturedBy does not include an unsupported character | Link |
Date Added
DateAddedMustBePresent
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that dateAdded is present | Link |
DateAddedMustHaveValidFormat
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that dateAdded formatting is valid |
Example Validation Report
{
"code": "VALIDATION__DateAddedMustHaveValidFormat",
"severity": "VIOLATION",
"message": "'{{dateAdded}}' must have valid format",
"context": {
"dateAdded": "31-08-2022"
},
"details": {
"createdDate": "2026-08-31T23:54:07.725Z",
"submitted": [
{
"field": "$.assetDetails.dateAdded",
"value": "31-08-2022"
}
],
"compared": [],
"expected": []
}
}
DateAddedMustNotBeEmpty
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that dateAdded is not an empty string |
MustNotBeFutureDate
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that dateAdded is not a future date |
Image ID
AspectRatioMustBeWithinRangeForCoverPhotoIntent
| Preconditions |
|---|
intent is COVER_PHOTO |
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that longest dimension is between >= 1.5380 and =< 1.5402 the length of the shortest dimension | Link |
Example Validation Report
{
"validationReports": [
{
"code": "VALIDATION__AspectRatioMustBeWithinRangeForCoverPhotoIntent",
"severity": "VIOLATION",
"message": "Aspect ratio of photo, referenced via imageId, must be within permitted range",
"details": {
"createdDate": "2026-09-02T11:36:02.000Z",
"submitted": [
{
"field": "$.assetDetails.imageId",
"value": "b023f0b2-d10b-11f0-8de9-0242ac120002"
}
]
}
}
]
}
ImageIdMustNotBeEmpty
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that imageId is not an empty string |
ImageIdMustBeResolvable
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that imageId is resolvable to an Apple-generated Image ID within the organization's data context |
OrientationMustBeLandscapeForCoverPhotoIntent
| Preconditions |
|---|
intent is COVER_PHOTO |
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that a photo, referenced via imageId, has a pixelWidth value that is greater than the pixelHeight value | Link |
ReferencedImagesProcessingNotCompleted
| Preconditions |
|---|
imageId value is present |
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that the referenced image's metadata is available (a post-condition of processing) so that the image can be further validated in the context of its association with a location asset |
ReferencedPhotoMustHaveRequiredSizeForCoverPhotoIntent
| Preconditions |
|---|
imageId is present |
intent is COVER_PHOTO |
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that the dimensions of a photo, referenced via imageId, are within permitted range |
ReferencedPhotoMustHaveRequiredSizeForGalleryIntent
| Preconditions |
|---|
imageId is present |
intent is GALLERY |
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that the dimensions of a photo, referenced via imageId, are within permitted range |
Partners Asset Id
PartnersAssetIdMustBePresent
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that partnersAssetId is present | Link |
PartnersAssetIdMustNotBeEmpty
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that partnersAssetId is not an empty string |
PartnersAssetIdHasUnsupportedCharacter
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that partnersAssetId does not include an unsupported character | Link |
Photos/Image
MustHavePhotosOrImageID
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that either photos or imageId is present |
MustNotHaveBothPhotosAndImageId
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that photos and imageId are not simultaneously present |
Quality
PhotoRejected
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that an image/photo resource successfully passes URL and data quality review |
Example Validation Report
{
"validationReports": [
{
"code": "VALIDATION__PhotoRejected",
"severity": "VIOLATION",
"message": "Photo with Apple-generated '{{id}}', with '{{value}}', rejected for reason: '{{reason}}'",
"context": {
"id": "9467895078742654976",
"value": "http://goodpartner.com/images/malibuicecream/xl/3887884.jpg",
"reason": "pii_document, modified"
},
"details": {
"createdDate": "2026-02-10T11:36:02.00Z",
"submitted": [],
"compared": [],
"expected": []
}
}
]
}
Reasons
URL Scan
{{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 |
Data Quality
{{reason}} | Visual artifacts include but are not limited to |
|---|---|
added_text | |
added_graphics | |
added_border | |
alcoholic_product | |
artwork | |
collage | |
damaging_to_poi | |
disturbing | |
excessive_blurring | |
faces | |
grayscale_image | |
historical_image | |
incorrect_blurring | |
illustration | |
license_plate | |
logo | |
modified | watermarks, collages, special effects, corporate artwork |
nudity | |
offensive | |
pii_document | |
posing | |
privacy_concern | |
qr_code | |
quality | |
satellite_image | |
tobacco_product | |
unspecified | |
violence |
Resource State
LocationAssetMustPossessRequiredState
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that resource state is not SUBMITTED |
LocationAssetStateDoesNotAllowUndelete
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that resource state is not FAILED or REJECTED |
UndeleteTimePeriodHasElapsed
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that the quantity of days that a resource's state was DELETED is forty (40) days or less |
Example Validation Report
{
"code": "VALIDATION__UndeleteTimePeriodHasElapsed",
"message": "Undelete operation no longer available after 40 days",
"severity": "VIOLATION",
"details": {
"createdDate": "2026-02-10T11:36:02.00Z",
"submitted": [],
"compared": [],
"expected": []
}
}
LocationAssetStateDoesNotAllowUpdate
| Preconditions |
|---|
Resource state is REJECTED, or validation status is PHOTO_VALIDATION_REJECTED |
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that validation status does not indicate a photo processing failure or rejection |
Example Validation Report
{
"code": "VALIDATION__LocationAssetStateDoesNotAllowUpdate",
"severity": "VIOLATION",
"message": "Location Asset with Apple-generated ID '{{id}}' cannot be updated",
"context": {
"id": "9467895078742654976"
},
"details": {
"createdDate": "2026-02-10T11:36:02.00Z",
"submitted": [],
"compared": [],
"expected": []
}
}
Source
SourceMustBeValid
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that source value is valid | Link |
Example Validation Report
{
"code": "VALIDATION__SourceMustBeValid",
"message": "{{source}}' value is invalid",
"severity": "VIOLATION",
"context": {
"source": "customer"
},
"details": {
"createdDate": "2026-09-02T11:36:02.000Z",
"submitted": [],
"compared": [],
"expected": []
}
}
SourceMustNotBeEmpty
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that source is not an empty string |
Example Validation Report
{
"code": "VALIDATION__SourceMustNotBeEmpty",
"severity": "VIOLATION",
"message": "'{{field}}' must not be empty string",
"context": {
"field": "source"
},
"details": {
"createdDate": "2026-09-02T11:36:02.000Z",
"submitted": [],
"compared": [],
"expected": []
}
}
SourceNotPresent
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
Validate that source (recommended feature) is present | Link |
Example Validation Report
{
"code": "VALIDATION__SourceNotPresent",
"severity": "WARNING",
"message": "New Location Asset does not include '{{source}}' (recommended)",
"context": {
"source": null
},
"details": {
"createdDate": "2026-09-02T11:36:02.000Z",
"submitted": [],
"compared": [],
"expected": []
}
}
Asset Details
UpdatedLocationAssetShouldNotMatchExistingLocationAsset
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that the location asset does not exactly match the previous existing stored record |
Example Validation Report
{
"validationReports": [
{
"code": "VALIDATION__UpdatedLocationAssetShouldNotMatchExistingLocationAsset",
"severity": "VIOLATION",
"message": "Updated Location Asset exactly matches previous existing stored record",
"details": {
"createdDate": "2026-02-10T11:36:02.00Z",
"submitted": [],
"compared": [],
"expected": []
}
}
]
}
Location Asset
LocationAssetCountExceedsMaximum
| Definition | Severity | API | Sample | Mode |
|---|---|---|---|---|
| Validate that the count of location assets per location does not exceed the maximum |
note
A location may have no more than 100 location assets. This limit is enforced in the AIE environment only. No equivalent location asset count limit is applied in production.
Example Validation Report
{
"code": "VALIDATION__LocationAssetCountExceedsMaximum",
"severity": "VIOLATION",
"message": "Count of location assets per location cannot exceed one hundred (100)",
"details": {
"createdDate": "2026-02-10T11:36:02.00Z",
"submitted": [],
"compared": [],
"expected": []
}
}