Skip to main content

Location action link details validation rules for link configuration and parameter requirements

ActionLinkDetailsNestedQuicklinksMustNotBeEmptyArray

DefinitionSeverityAPISampleMode
Validate that quicklinks is not an empty array
VIOLATION
POST_AND_PUT
S
Example Validation Report
{
"code": "VALIDATION__ActionLinkDetailsNestedQuicklinksMustNotBeEmptyArray",
"message": "'{{field}}' must be omitted or contain at least one element; empty arrays are not allowed.",
"severity": "VIOLATION",
"context": {
"field": "quicklinks"
},
"details": {
"compared": [],
"expected": [],
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks",
"value": "[]"
}
],
"createdDate": "2026-03-03T13:58:43.946Z"
}
}

CountOfItemsInQuicklinksListExceedsThreshold

DefinitionSeverityAPISampleMode
Validate that the count of items in quicklinks does not exceed two hundred fifty-six (256)
VIOLATION
POST_AND_PUT
S
Example Validation Report
{
"code": "VALIDATION__CountOfItemsInQuicklinksListExceedsThreshold",
"severity": "VIOLATION",
"message": "List of `quicklinks` exceeds limit"
}

QuicklinksListMustNotIncludeNulls

DefinitionSeverityAPISampleMode
Validate that a list does not include null
VIOLATION
POST_AND_PUT
S

QuicklinksListMustNotContainDuplicates

DefinitionSeverityAPISampleMode
Validate that each entry in the quicklinks list is distinct
VIOLATION
POST_AND_PUT
S
Example Validation Report
{
"code": "VALIDATION__QuicklinksListMustNotContainDuplicates",
"severity": "VIOLATION",
"message": "`quicklinks` list must not contain duplicates"
}
DefinitionSeverityAPISampleMode
Validate that a location's category is allowed to be associated with quicklinks
VIOLATION
POST_AND_PUT
S
Example Validation Report
{
"code": "VALIDATION__LocationMustNotHaveQuicklinks",
"severity": "VIOLATION",
"message": "Location with category '{{value}}' cannot have `quicklinks`",
"context": {
"value": "natural_features.water_feature.pool"
},
"details": {
"createdDate": "2026-09-02T11:36:02.000Z",
"submitted": [
{
"field": "$.locationDetails.categories[0]",
"value": "natural_features.water_feature.pool"
}
],
"compared": [],
"expected": []
}
}

App Store URL

AppStoreUrlMustBePresent

Preconditions
relationship is OTHER
DefinitionSeverityAPISampleMode
Validate that appStoreUrl is present
VIOLATION
POST_AND_PUT
Link
S
Example Validation Report
{
"code": "VALIDATION__AppStoreUrlMustBePresent",
"severity": "VIOLATION",
"message": "Field '{{field}}' must be present",
"context": {
"field": "appStoreUrl"
},
"details": {
"createdDate": "2026-02-10T11:36:02.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[0]"
}
],
"compared": [],
"expected": []
}
}

AppStoreUrlMustHaveExpectedAuthority

Preconditions
appStoreUrl value is present
DefinitionSeverityAPISampleMode
Validate that the appStoreUrl authority is apps.apple.com
VIOLATION
POST_AND_PUT
S
Example Validation Report
{
"code": "VALIDATION__AppStoreUrlMustHaveExpectedAuthority",
"severity": "VIOLATION",
"message": "'{{value}}' in field 'appStoreUrl' does not include expected authority. Valid value is 'apps.apple.com''",
"context": {
"value": "https://play.google.com/store/search?q=yelp&c=apps"
},
"details": {
"createdDate": "2026-02-10T11:36:02.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[0].appStoreUrl",
"value": "https://play.google.com/store/search?q=yelp&c=apps"
}
],
"compared": [],
"expected": []
}
}

AppStoreUrlsMustMatchWhenRelationshipIsOwner

Preconditions
More than one (1) OWNER relationship is present
appStoreUrl values are present (quicklinks are not flexible action links)
DefinitionSeverityAPISampleMode
Validate that appStoreUrl values match among Quicklinks whose relationship is OWNER
VIOLATION
POST_AND_PUT
S
Example Validation Report
{
"code": "VALIDATION__AppStoreUrlsMustMatchWhenRelationshipIsOwner",
"severity": "VIOLATION",
"message": "Non-matching values in field '{{field}}' among owned Quicklinks",
"context": {
"field": "appStoreUrl"
},
"details": {
"createdDate": "2026-02-10T11:36:02.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[0].appStoreUrl[0]"
}
],
"compared": [],
"expected": []
}
}

AppStoreUrlMustNotBeEmpty

DefinitionSeverityAPISampleMode
Validate that appStoreUrl is not an empty string
VIOLATION
POST_AND_PUT
S
Example Validation Report
{
"code": "VALIDATION__AppStoreUrlMustNotBeEmpty",
"severity": "VIOLATION",
"message": "Field '{{field}}' is empty",
"context": {
"field": "appStoreUrl"
},
"details": {
"createdDate": "2026-02-10T11:36:02.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[0].appStoreUrl"
}
],
"compared": [],
"expected": []
}
}

AppStoreUrlMustNotMatchQuicklinkUrl

DefinitionSeverityAPISampleMode
Validate that appStoreUrl and quicklinkUrl values do not match
VIOLATION
POST_AND_PUT
S
Example Validation Report
{
"code": "VALIDATION__AppStoreUrlMustNotMatchQuicklinkUrl",
"severity": "VIOLATION",
"message": "'appStoreUrl' and 'quicklinkUrl' values must not match"
}

Category

CategoryMayHaveOneAuthorizedAndOneOwnerRelationship

Preconditions
More than one (1) instance of the same category is present
appStoreUrl values are present (quicklinks are not flexible action links)
DefinitionSeverityAPISampleMode
Validate that only (1) of the Quicklink's respective relationship values is AUTHORIZED and only one (1) is OWNER
VIOLATION
POST_AND_PUT
Link
S
Example Validation Report
{
"code": "VALIDATION__CategoryMayHaveOneAuthorizedAndOneOwnerRelationship",
"severity": "VIOLATION",
"message": "Only one (1) `AUTHORIZED` and only one `OWNER` Quicklink may exist when 'category' value '{{value}}' are same",
"context": {
"value": "quicklinks.restaurant_order_food"
},
"details": {
"createdDate": "2026-02-10T11:36:02.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[1].category",
"value": "quicklinks.restaurant_order_food"
}
],
"compared": [],
"expected": []
}
}

CategoryMayBeAssociatedWithAppStoreUrlExactlyOnce

Preconditions
appStoreUrl is present (quicklink is not flexible action link)
DefinitionSeverityAPISampleMode
Validate that a category of quicklink references an appStoreUrl exactly once (1)
VIOLATION
POST_AND_PUT
Link
S
Example Validation Report
{
"code": "VALIDATION__CategoryMayBeAssociatedWithAppStoreUrlExactlyOnce",
"severity": "VIOLATION",
"message": "Quicklink Category '{{value}}' references the same `appStoreUrl` more than once",
"context": {
"field": "category",
"value": "quicklinks.restaurant_order_food"
},
"details": {
"createdDate": "2026-02-10T11:36:02.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[0].appStoreUrl",
"value": "https://apps.apple.com/us/app/yelp-food-delivery-reviews/id284910350"
},
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[1].appStoreUrl",
"value": "https://apps.apple.com/us/app/yelp-food-delivery-reviews/id284910350"
}
],
"compared": [],
"expected": []
}
}

CategoryOfFlexibleActionLinkMayHaveOneOwnerRelationship

Preconditions
appStoreUrl is not present (quicklink is flexible action link)
orgId resolves to organization that is location owner
DefinitionSeverityAPISampleMode
Validate that each category is distinct
VIOLATION
POST_AND_PUT
S
Example Validation Report
{
"code": "VALIDATION__CategoryOfFlexibleActionLinkMayHaveOneOwnerRelationship",
"severity": "VIOLATION",
"message": "Multiple `OWNER` quicklinks have matching category '{{category}}'",
"context": {
"category": "quicklinks.restaurant_order_food"
},
"details": {
"createdDate": "2026-02-10T11:36:02.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[1].category",
"value": "quicklinks.restaurant_order_food"
}
],
"compared": [],
"expected": []
}
}

CategoryMustBePresent

Preconditions
quicklinks are present
DefinitionSeverityAPISampleMode
Validate that category is present
VIOLATION
POST_AND_PUT
Link
S
Example Validation Report
{
"code": "VALIDATION__CategoryMustBePresent",
"severity": "VIOLATION",
"message": "Field '{{field}}' must be present",
"context": {
"field": "category"
}
}

CategoryMustNotBeEmpty

DefinitionSeverityAPISampleMode
Validate that category is not an empty string
VIOLATION
POST_AND_PUT
S
Example Validation Report
{
"code": "VALIDATION__CategoryMustNotBeEmpty",
"severity": "VIOLATION",
"message": "Field '{{field}}' is empty",
"context": {
"field": "category"
},
"details": {
"createdDate": "2026-02-10T11:36:02.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[0].category"
}
],
"compared": [],
"expected": []
}
}

CategoryMustBeValid

DefinitionSeverityAPISampleMode
Validate that category value is valid
VIOLATION
POST_AND_PUT
Link
S
Example Validation Report
{
"code": "VALIDATION__CategoryMustBeValid",
"severity": "VIOLATION",
"message": "'category' value '{{value}}' is invalid",
"context": {
"value": "foo_bar"
},
"details": {
"createdDate": "2026-02-10T11:36:02.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[0].category",
"value": "foo_bar"
}
],
"compared": [],
"expected": []
}
}

CategoryMustBeValidForUseWithPrimaryCategory

DefinitionSeverityAPISampleMode
Validate that category value is valid for use in conjunction with the location's primary category
VIOLATION
POST
Link,Link
S
Example Validation Report
{
"code": "VALIDATION__CategoryMustBeValidForUseWithPrimaryCategory",
"severity": "VIOLATION",
"message": "'category' value '{{value}}' is not valid for use with location's primary category",
"context": {
"value": "MENU"
},
"details": {
"createdDate": "2026-02-10T11:36:02.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[0].category",
"value": "MENU"
}
],
"compared": [
{
"field": "$.locationDetails.categories[0]/",
"value": "ev_fast_charging_station"
}
],
"expected": []
}
}

FlexibleActionLinkRelationshipMustBeOwner

Preconditions
appStoreUrl is not present (quicklink is flexible action link)
orgId resolves to organization that is location owner
DefinitionSeverityAPISampleMode
Validate that relationship value is OWNER
VIOLATION
POST_AND_PUT
Link
S
Example Validation Report
{
"code": "VALIDATION__FlexibleActionLinkRelationshipMustBeOwner",
"severity": "VIOLATION",
"message": "A organization that owns the location may only submit 'OWNER' flexible action link",
"details": {
"createdDate": "2026-02-10T11:36:02.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[0].relationship",
"value": "AUTHORIZED"
}
],
"compared": [],
"expected": []
}
}

FlexibleActionLinkRelationshipMustBeAuthorized

Preconditions
appStoreUrl is not present (quicklink is flexible action link)
orgId resolves to organization that is an authorized (AGENCY) partner
DefinitionSeverityAPISampleMode
Validate that relationship value is AUTHORIZED
VIOLATION
POST_AND_PUT
Link
S
Example Validation Report
{
"code": "VALIDATION__FlexibleActionLinkRelationshipMustBeAuthorized",
"severity": "VIOLATION",
"message": "An agency may only submit an 'AUTHORIZED' flexible action link",
"details": {
"createdDate": "2026-10-10T11:36:02.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[0].relationship",
"value": "OWNER"
}
],
"compared": [],
"expected": []
}
}
Preconditions
appStoreUrl is not present (quicklink is flexible action link)
DefinitionSeverityAPISampleMode
Validate that orgId resolves to organization that is location owner or authorized agency
VIOLATION
POST_AND_PUT
S
Example Validation Report
{
"code": "VALIDATION__OnlyLocationOwnerOrAuthorizedAgencyMaySubmitFlexibleActionLink",
"severity": "VIOLATION",
"message": "Only location owner or trusted agency may submit a flexible action link",
"details": {
"createdDate": "2026-10-10T11:36:02.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[2]"
}
],
"compared": [],
"expected": []
}
}

FlexibleActionLinkIsMalformed

Preconditions
appStoreUrl is not present (quicklink is flexible action link)
DefinitionSeverityAPISampleMode
Validate that flexible action link quicklinkUrl has expected variables
VIOLATION
POST_AND_PUT
A
Example Validation Report
{
"code": "VALIDATION__FlexibleActionLinkIsMalformed",
"severity": "VIOLATION",
"message": "Flexible action link '{{value}}' in 'quicklinkUrl' is malformed",
"context": {
"value": "http://www.exam ple.com"
},
"details": {
"createdDate": "2026-02-01T21:00:00.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[0].quicklinkUrl",
"value": "http://www.exam ple.com"
}
],
"compared": [],
"expected": []
}
}

FlexibleActionLinkIsNotParsable

Preconditions
appStoreUrl is not present (quicklink is flexible action link)
DefinitionSeverityAPISampleMode
Validate that flexible action link quicklinkUrl is parsable
VIOLATION
POST_AND_PUT
A
Example Validation Report
{
"code": "VALIDATION__FlexibleActionLinkIsNotParsable",
"message": "Flexible action link '{{value}}' in 'quicklinkUrl' is not parsable",
"severity": "VIOLATION",
"context": {
"value": "httpsexamplecom/page"
},
"details": {
"createdDate": "2026-02-01T21:00:00.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[0].quicklinkUrl",
"value": "httpsexamplecom/page"
}
],
"compared": [],
"expected": []
}
}

FlexibleActionLinkProtocolIsNotSupported

Preconditions
appStoreUrl is not present (quicklink is flexible action link)
DefinitionSeverityAPISampleMode
Validate that the flexible action link quicklinkUrl url protocol is https
VIOLATION
POST_AND_PUT
S
Example Validation Report
{
"code": "VALIDATION__FlexibleActionLinkProtocolIsNotSupported",
"message": "Protocol for flexible action link '{{value}}' in 'quicklinkUrl' must be `https`",
"severity": "VIOLATION",
"context": {
"value": "ftp://public.ftp-servers.example.com/mydirectory/myfile.txt"
},
"details": {
"createdDate": "2026-02-01T21:00:00.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[0].quicklinkUrl",
"value": "ftp://public.ftp-servers.example.com/mydirectory/myfile.txt"
}
],
"compared": [],
"expected": []
}
}

FlexibleActionLinkPortNumberIsNotSupported

Preconditions
appStoreUrl is not present (quicklink is flexible action link)
DefinitionSeverityAPISampleMode
Validate that the port number is in the range 1 to 65535
VIOLATION
POST_AND_PUT
A
Example Validation Report
{
"code": "VALIDATION__FlexibleActionLinkPortNumberIsNotSupported",
"message": "Port number for '{{value}}' in 'quicklinkUrl' must be in range 1 to 65535",
"severity": "VIOLATION",
"context": {
"value": "https://example.com/page"
},
"details": {
"createdDate": "2026-02-01T21:00:00.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[0].quicklinkUrl",
"value": "https://example.com/page"
}
],
"compared": [],
"expected": []
}
}

FlexibleActionLinkDomainOrAddressIsNotSupported

Preconditions
appStoreUrl is not present (quicklink is flexible action link)
DefinitionSeverityAPISampleMode
Validate that the hostname is an FQDN, or IPv4 or IPv6 address
VIOLATION
POST_AND_PUT
A
Example Validation Report
{
"code": "VALIDATION__FlexibleActionLinkDomainOrAddressIsNotSupported",
"message": "Hostname for '{{value}}' in 'quicklinkUrl' must be FQDN, or IPv4 or IPv6 address",
"severity": "VIOLATION",
"context": {
"value": "https://example_page.com"
},
"details": {
"createdDate": "2026-02-01T21:00:00.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[0].quicklinkUrl",
"value": "https://example_page.com"
}
],
"compared": [],
"expected": []
}
}

FlexibleActionLinkFQDNHostnameIsNotResolvable

Preconditions
appStoreUrl is not present (quicklink is flexible action link)
DefinitionSeverityAPISampleMode
Validate that an FQDN hostname is resolvable
VIOLATION
POST_AND_PUT
A
Example Validation Report
{
"code": "VALIDATION__FlexibleActionLinkFQDNHostnameIsNotResolvable",
"message": "FQDN hostname is not resolvable for '{{value}}' in 'quicklinkUrl'",
"severity": "VIOLATION",
"context": {
"value": "https://example_page.com"
},
"details": {
"createdDate": "2026-02-01T21:00:00.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[0].quicklinkUrl",
"value": "https://example_page.com"
}
],
"compared": [],
"expected": []
}
}

FlexibleActionLinkIPAddressIsNotSupported

Preconditions
appStoreUrl is not present (quicklink is flexible action link)
DefinitionSeverityAPISampleMode
Validate that the resolved IP or the IP within the hostname is supported
VIOLATION
POST_AND_PUT
A
Example Validation Report
{
"code": "VALIDATION__FlexibleActionLinkIPAddressIsNotSupported",
"message": "IP Address is not supported for '{{value}}' in 'quicklinkUrl'",
"severity": "VIOLATION",
"context": {
"value": "https://example_page.com"
},
"details": {
"createdDate": "2026-02-01T21:00:00.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[0].quicklinkUrl",
"value": "https://example_page.com"
}
],
"compared": [],
"expected": []
}
}

FlexibleActionLinkContentExceedsMaxFileSize

Preconditions
appStoreUrl is not present (quicklink is flexible action link)
DefinitionSeverityAPISampleMode
Validate that content byte size does not exceed threshold
VIOLATION
POST_AND_PUT
A
Example Validation Report
{
"code": "VALIDATION__FlexibleActionLinkContentExceedsMaxFileSize",
"message": "Content for '{{value}}' in 'quicklinkUrl' exceeds maximum allowed size",
"severity": "VIOLATION",
"context": {
"value": "https://example.com/page"
},
"details": {
"createdDate": "2026-02-01T21:00:00.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[0].quicklinkUrl",
"value": "https://example.com/page"
}
],
"compared": [],
"expected": []
}
}

FlexibleActionLinkContentNotDownloadedSuccessfully

Preconditions
appStoreUrl is not present (quicklink is flexible action link)
DefinitionSeverityAPISampleMode
Validate that content is downloaded successfully and that content byte size does not exceed threshold
VIOLATION
POST_AND_PUT
A
Example Validation Report
{
"code": "VALIDATION__FlexibleActionLinkContentNotDownloadedSuccessfully",
"message": "Content for '{{value}}' in 'quicklinkUrl' could not be downloaded. Or, downloaded content exceeds maximum allowed size",
"severity": "VIOLATION",
"context": {
"value": "https://example.com/page"
},
"details": {
"createdDate": "2026-02-01T21:00:00.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[0].quicklinkUrl",
"value": "https://example.com/page"
}
],
"compared": [],
"expected": []
}
}

FlexibleActionLinkContentMimeTypeNotSupported

Preconditions
appStoreUrl is not present (quicklink is flexible action link)
DefinitionSeverityAPISampleMode
Validate that MIME type is valid and supported
VIOLATION
POST_AND_PUT
A
Example Validation Report
{
"code": "VALIDATION__FlexibleActionLinkContentMimeTypeNotSupported",
"message": "Content MIME type for '{{value}}' in 'quicklinkUrl' is invalid or unsupported",
"severity": "VIOLATION",
"context": {
"value": "https://example.com/page"
},
"details": {
"createdDate": "2026-02-01T21:00:00.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[0].quicklinkUrl",
"value": "https://example.com/page"
}
],
"compared": [],
"expected": []
}
}

FlexibleActionLinkContentMimeTypeDiscrepancy

Preconditions
appStoreUrl is not present (quicklink is flexible action link)
DefinitionSeverityAPISampleMode
Validate that content's detected MIME type matches the expected MIME type
VIOLATION
POST_AND_PUT
A
Example Validation Report
{
"code": "VALIDATION__FlexibleActionLinkContentMimeTypeDiscrepancy",
"message": "Detected MIME type for '{{value}}' in 'quicklinkUrl' does not match expected MIME type",
"severity": "VIOLATION",
"context": {
"value": "https://example.com/page"
},
"details": {
"createdDate": "2026-02-01T21:00:00.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[0].quicklinkUrl",
"value": "https://example.com/page"
}
],
"compared": [],
"expected": []
}
}

FlexibleActionLinkContentFailedVirusScan

Preconditions
appStoreUrl is not present (quicklink is flexible action link)
DefinitionSeverityAPISampleMode
Validate that content passes a virus scan check
VIOLATION
POST_AND_PUT
A
Example Validation Report
{
"code": "VALIDATION__FlexibleActionLinkContentFailedVirusScan",
"message": "Content for '{{value}}' in 'quicklinkUrl' failed virus scan",
"severity": "VIOLATION",
"context": {
"value": "https://example.com/page"
},
"details": {
"createdDate": "2026-02-01T21:00:00.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[0].quicklinkUrl",
"value": "https://example.com/page"
}
],
"compared": [],
"expected": []
}
}

DifferentAuthorizedQuicklinksWithNonDistinctQuicklinkUrls

Preconditions
More than one (1) AUTHORIZED relationship is present
Among AUTHORIZED Quicklinks, appStoreUrl values are distinct
DefinitionSeverityAPISampleMode
Validate that quicklinkUrl values are distinct
VIOLATION
POST_AND_PUT
S
Example Validation Report
{
"code": "VALIDATION__DifferentAuthorizedQuicklinksWithNonDistinctQuicklinkUrls",
"severity": "VIOLATION",
"message": "Field 'quicklinkUrl' value '{{value}}' matches another `AUTHORIZED` provider with different `appStoreUrl`",
"context": {
"value": "https://www.dai-due.com/menu/"
},
"details": {
"createdDate": "2026-02-10T11:36:02.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[1].quicklinkUrl",
"value": "https://www.dai-due.com/menu/"
}
],
"compared": [],
"expected": []
}
}

QuicklinkUrlsMatch

Preconditions
More than one (1) instance of the same category is present
At least one quicklink has no appStoreUrl (quicklink is flexible action link)
At least one quicklink has an appStoreUrl (quicklink is not a flexible action link)
DefinitionSeverityAPISampleMode
Validate that a flexible action link's quicklinkUrl does not match any quicklinkUrl possessed by a quicklink with an appStoreUrl
VIOLATION
POST_AND_PUT
Link
S
Example Validation Report
{
"code": "VALIDATION__QuicklinkUrlsMatch",
"severity": "VIOLATION",
"message": "Flexible action link 'quicklinkUrl' value '{{value}}' matches quicklink with an 'appStoreUrl'",
"context": {
"value": "https://www.dai-due.com/menu/"
},
"details": {
"createdDate": "2026-05-10T11:36:02.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[0].quicklinkUrl",
"value": "https://www.dai-due.com/menu/"
},
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[1].quicklinkUrl",
"value": "https://www.dai-due.com/menu/"
}
],
"compared": [],
"expected": []
}
}

FlexibleActionLinkQuicklinkUrlsMatch

Preconditions
Action link category values are dissimilar
Action links being compared have no appStoreUrl (quicklinks are flexible action links)
DefinitionSeverityAPISampleMode
Validate that quicklinkUrl values do not match
WARNING
POST_AND_PUT
S
Example Validation Report
{
"code": "VALIDATION__FlexibleActionLinkQuicklinkUrlsMatch",
"severity": "WARNING",
"message": "Flexible action links with dissimilar category share the same 'quicklinkUrl' value '{{value}}'",
"context": {
"value": "https://www.austin-theater.com/shows"
},
"details": {
"createdDate": "2026-10-10T11:36:02.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[0]",
"value": {
"category": "quicklinks.theater_now_playing",
"quicklinkUrl": "https://www.austin-theater.com/shows",
"relationship": "AUTHORIZED"
}
},
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[1]",
"value": {
"category": "quicklinks.buy_tickets",
"quicklinkUrl": "https://www.austin-theater.com/shows",
"relationship": "AUTHORIZED"
}
}
],
"compared": [],
"expected": []
}
}

OwnerProvidedQuicklinksWithNonDistinctQuicklinkUrls

Preconditions
More than one (1) OWNER relationship is present
Among OWNER Quicklinks, appStoreUrl values match
DefinitionSeverityAPISampleMode
Validate that quicklinkUrl values are distinct
VIOLATION
POST_AND_PUT
S
Example Validation Report
{
"code": "VALIDATION__OwnerProvidedQuicklinksWithNonDistinctQuicklinkUrls",
"severity": "VIOLATION",
"message": "Field 'quicklinkUrl' value '{{value}}' matches another `AUTHORIZED` provider with different `appStoreUrl`",
"context": {
"value": "https://www.dai-due.com/menu/"
},
"details": {
"createdDate": "2026-02-10T11:36:02.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[1].quicklinkUrl",
"value": "https://www.dai-due.com/menu/"
}
],
"compared": [],
"expected": []
}
}

QuicklinkUrlMustBePresent

Preconditions
quicklinks are present
DefinitionSeverityAPISampleMode
Validate that quicklinkUrl is present
VIOLATION
POST_AND_PUT
Link
S
Example Validation Report
{
"code": "VALIDATION__QuicklinkUrlMustBePresent",
"severity": "VIOLATION",
"message": "Field '{{field}}' must be present",
"context": {
"field": "quicklinkUrl"
}
}

QuicklinkUrlLengthMustNotExceedMaximum

DefinitionSeverityAPISampleMode
Validate that quicklinkUrl length does not exceed a maximum value (255)
VIOLATION
POST_AND_PUT
Link
S
Example Validation Report
{
"code": "VALIDATION__QuicklinkUrlLengthMustNotExceedMaximum",
"severity": "WARNING",
"message": "'{{field}}' length must not be exceeded",
"context": {
"field": "quicklinkUrl"
},
"details": {
"createdDate": "2026-02-10T11:36:02.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[1].quicklinkUrl",
"value": "http://exampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexampleexample.com"
}
],
"compared": [],
"expected": []
}
}

QuicklinkUrlMatchesHomePageUrl

DefinitionSeverityAPISampleMode
Validate that quicklinkUrl does not exactly match the HOMEPAGE url in urls
WARNING
POST_AND_PUT
S
Example Validation Report
{
"code": "VALIDATION__QuicklinkUrlMatchesHomePageURL",
"severity": "WARNING",
"message": "'{{field}}' matches HOMEPAGE url",
"context": {
"field": "quicklinkUrl"
},
"details": {
"createdDate": "2026-02-10T11:36:02.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[1].quicklinkUrl",
"value": "https://www.daidue.com"
}
],
"compared": [],
"expected": []
}
}

QuicklinkUrlMustNotBeEmpty

DefinitionSeverityAPISampleMode
Validate that quicklinkUrl is not an empty string
VIOLATION
POST_AND_PUT
S
Example Validation Report
{
"code": "VALIDATION__QuicklinkUrlMustNotBeEmpty",
"severity": "VIOLATION",
"message": "Field '{{field}}' is empty",
"context": {
"field": "quicklinkUrl"
},
"details": {
"createdDate": "2026-02-10T11:36:02.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[0].quicklinkUrl"
}
],
"compared": [],
"expected": []
}
}

QuicklinkUrlMustNotBeAppStoreUrl

DefinitionSeverityAPISampleMode
Validate that quicklinkUrl is not an App Store URL
VIOLATION
POST_AND_PUT
S
Example Validation Report
{
"code": "VALIDATION__QuicklinkUrlMustNotBeAppStoreUrl",
"severity": "VIOLATION",
"message": "'{{value}}' in `quicklinkUrl` is App Store URL",
"context": {
"value": "https://apps.apple.com/us/app/yelp-food-delivery-reviews/id284910350"
},
"details": {
"createdDate": "2026-02-10T11:36:02.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[0].quicklinkUrl",
"value": "https://apps.apple.com/us/app/yelp-food-delivery-reviews/id284910350"
}
],
"compared": [],
"expected": []
}
}

QuicklinkUrlMustHaveValidFormat

Preconditions
appStoreUrl is not present (quicklink is flexible action link)
DefinitionSeverityAPISampleMode
Validate that quicklinkUrl has valid formatting
VIOLATION
POST_AND_PUT
S

Relationship

RelationshipMustBePresent

Preconditions
quicklinks are present
DefinitionSeverityAPISampleMode
Validate that relationship is present
VIOLATION
POST_AND_PUT
Link
S
Example Validation Report
{
"code": "VALIDATION__RelationshipMustBePresent",
"severity": "VIOLATION",
"message": "Field '{{field}}' must be present",
"context": {
"field": "relationship"
}
}

RelationshipMustNotBeEmpty

DefinitionSeverityAPISampleMode
Validate that relationship is not an empty string
VIOLATION
POST_AND_PUT
S
Example Validation Report
{
"code": "VALIDATION__RelationshipMustNotBeEmpty",
"severity": "VIOLATION",
"message": "Field '{{field}}' is empty",
"context": {
"field": "relationship"
},
"details": {
"createdDate": "2026-02-10T11:36:02.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[0].relationship"
}
],
"compared": [],
"expected": []
}
}

RelationshipMustBeValid

DefinitionSeverityAPISampleMode
Validate that relationship value is valid
VIOLATION
POST_AND_PUT
Link
S
Example Validation Report
{
"code": "VALIDATION__RelationshipMustBeValid",
"severity": "VIOLATION",
"message": "'{{value}}' in 'relationship' is invalid. Valid values are 'OWNER', 'AUTHORIZED', or 'OTHER'",
"context": {
"value": "CUSTOMER"
},
"details": {
"createdDate": "2026-02-10T11:36:02.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[0].relationship"
}
],
"compared": [],
"expected": []
}
}

Security

AppStoreUrlMustPassUrlScan

DefinitionSeverityAPISampleMode
Validate that appStoreUrl passes security checks
VIOLATION
POST_AND_PUT
A

QuickLinkUrlMustPassUrlScan

Preconditions
quicklinks object does not describe a flexible action link
DefinitionSeverityAPISampleMode
Validate that quicklinkUrl passes security checks
VIOLATION
POST_AND_PUT
A
{{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__QuickLinkUrlMustPassUrlScan",
"message": "QuickLinkUrl rejected for reason: '{{reason}}'",
"severity": "VIOLATION",
"context": {
"reason": "only http or https schemes accepted"
},
"details": {
"createdDate": "2026-09-01T21:00:00.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[1].quicklinkUrl",
"value": "ftp://www.dai-due.com/menu/"
}
],
"compared": [],
"expected": []
}
}

FlexibleActionLinkAuthorityNotMatchedInLocationUrls

Preconditions
appStoreUrl is not present (quicklink is flexible action link)
Location urls lists HOMEPAGE
DefinitionSeverityAPISampleMode
Validate that an authority in a flexible action link's quicklinkUrl matches the authority of the location's HOMEPAGE
INFO
POST_AND_PUT
S
Example Validation Report
{
"code": "VALIDATION__QuicklinkUrlAuthorityNotMatchedInLocationUrls",
"severity": "INFO",
"message": "Authority in '{{value}}' in field 'quicklinkUrl' does not match `HOMEPAGE` authority in location's 'urls'",
"context": {
"field": "quicklinkUrl"
},
"details": {
"createdDate": "2026-02-10T11:36:02.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[1].quicklinkUrl",
"value": "https://www.unmatched-authority.com/menu/"
}
],
"compared": [],
"expected": []
}
}

FlexibleActionLinkOnDenyList

Preconditions
appStoreUrl is not present (quicklink is flexible action link)
DefinitionSeverityAPISampleMode
Validate that a 'quicklinkUrl' value or its redirect URL is not on a deny list
VIOLATION
POST_AND_PUT
A
Example Validation Report
{
"code": "VALIDATION__FlexibleActionLinkOnDenyList",
"severity": "VIOLATION",
"message": "Flexible action link's 'quicklinkUrl' or '{{redirectUrl}}' is on deny list",
"context": {
"redirectUrl": "https://www.redirect-url-on-deny-list.com"
},
"details": {
"createdDate": "2026-02-10T11:36:02.00Z",
"submitted": [
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[1].quicklinkUrl",
"value": "https://www.website-on-deny-list.com"
}
],
"compared": [],
"expected": []
}
}

URL Re-scan

LocationUrlRejected

DefinitionSeverityAPISampleMode
Periodically, (re)validate that a quicklinkUrl, or its redirect URL, passes security checks
VIOLATION
POST_AND_PUT
A
note

{{reason}} may be populated by the message value that's associated with the manual verification of a flexible action link

Example Validation Report
{
"validationReports": [
{
"code": "VALIDATION__LocationUrlRejected",
"message": "Location `quicklinkUrl` rejected: '{{reason}}'",
"severity": "VIOLATION",
"context": {
"reason": "Flexible action link does not correspond to Location."
},
"details": {
"createdDate": "2026-04-10T11:36:02.00Z",
"submitted": [
{
"field": "$.id",
"value": "1851286158726660114"
},
{
"field": "$.etag",
"value": "ca59b316-ddcd-11ec-97ed-2bc3ad80a69c"
},
{
"field": "$.locationDetails.actionLinkDetails.quicklinks[0].",
"value": "https://example.com/irrelevant-flexible-action-link-on-location"
}
]
}
}
]
}

Process Flow

  1. System fetches the quicklinkUrl
  2. System validates the URL or its redirect ("value")
  3. If one or more automated checks reject the value, then Subflow A
  4. If value is not in the allow list, then Manual Verification is triggered:
  1. If value is in the allow list, then Subflow B

Subflow A

  • System captures Feedback and Notification
  • Periodically API user requests Notifications

Subflow B

note

Partner location etag is unchanged. No feedback or notification is generated