Keystone Developers
Open Keystone
API reference

Console API

Listings

11 endpoints.

GET/api/v1/admin/businesses/{business_id}/listings

List managed GBP listings grouped by internal location

Parameters

NameInTypeDescription
business_idrequiredpathstring (uuid)
authorizationheaderstring | null

Responses

200Successful Response
application/jsonSuccessResponse_ManagedListingsData_
FieldTypeDescription
request_idrequiredstring
successtruedefault true
datarequiredManagedListingsData
ManagedListingsData fields
FieldTypeDescription
groupsrequiredListingLocationGroup[]
ListingLocationGroup[] fields

ListingLocationGroup (not expanded)

metadataResponseMetadata | null
ResponseMetadata fields
FieldTypeDescription
paginationPaginationMetadata | null
PaginationMetadata fields
FieldTypeDescription
limitrequiredinteger
next_cursorstring | null
prev_cursorstring | null
has_morerequiredboolean
has_prevbooleandefault false
total_countinteger | null
status_countsobject | null
object | null fields

Map of string to integer

lifecycle_countsLifecycleCounts | null
LifecycleCounts fields
FieldTypeDescription
leadintegerdefault 0
prospectintegerdefault 0
customerintegerdefault 0
former_customerintegerdefault 0
classification_countsClassificationCounts | null
ClassificationCounts fields
FieldTypeDescription
signalobject
object fields

Nested object (not expanded)

touchobject
object fields

Nested object (not expanded)

stageobject
object fields

Nested object (not expanded)

metaResponseMeta | null
ResponseMeta fields
FieldTypeDescription
totalinteger | null
total_countinteger | null
pageinteger | null
per_pageinteger | null
  • 400Bad request
  • 401Unauthorized
  • 403Forbidden
  • 404Not found
  • 422Validation error
  • 500Internal server error
  • 503Service unavailable

Error bodies: ErrorResponse. See Errors.

GET/api/v1/admin/businesses/{business_id}/listings/{listing_id}

Get managed listing detail (overview from GBP Business Information)

Parameters

NameInTypeDescription
business_idrequiredpathstring (uuid)
listing_idrequiredpathstring (uuid)
authorizationheaderstring | null

Responses

200Successful Response
application/jsonSuccessResponse_ListingDetailData_
FieldTypeDescription
request_idrequiredstring
successtruedefault true
datarequiredListingDetailData
ListingDetailData fields
FieldTypeDescription
listing_idrequiredstring (uuid)
business_idrequiredstring (uuid)
gbp_location_idrequiredstring
full_resource_namerequiredstring
internal_location_idrequiredstring (uuid) | null
is_managedrequiredboolean
titlerequiredstring | null
store_coderequiredstring | null
overviewrequiredListingOverviewData | null
ListingOverviewData fields
FieldTypeDescription
namestring | null
address_formattedstring | null
addressobject | null
service_areaobject | null
phonestring | null
additional_phonesstring[]
string[] fields

Nested object (not expanded)

websitestring | null
category_primarystring | null
categories_additionalstring[]
string[] fields

Nested object (not expanded)

statusstring | null
descriptionstring | null
regular_hoursobject | null
open_infoobject | null
store_codestring | null
platform_infoListingPlatformInfo | null
ListingPlatformInfo fields
FieldTypeDescription
place_idstring | null
maps_urlstring | null
new_review_uristring | null
metadataResponseMetadata | null
ResponseMetadata fields

ResponseMetadata, expanded above.

metaResponseMeta | null
ResponseMeta fields

ResponseMeta, expanded above.

  • 400Bad request
  • 401Unauthorized
  • 403Forbidden
  • 404Not found
  • 422Validation error
  • 500Internal server error
  • 503Service unavailable

Error bodies: ErrorResponse. See Errors.

GET/api/v1/admin/businesses/{business_id}/listings/{listing_id}/photos

List photos linked to a managed GBP listing

Parameters

NameInTypeDescription
business_idrequiredpathstring (uuid)
listing_idrequiredpathstring (uuid)
authorizationheaderstring | null

Responses

200Successful Response
application/jsonSuccessResponse_list_ListingPhotoItem__
FieldTypeDescription
request_idrequiredstring
successtruedefault true
datarequiredListingPhotoItem[]
ListingPhotoItem[] fields
FieldTypeDescription
association_idrequiredstring (uuid)
photo_idrequiredstring (uuid)
photo_urlstring | null
is_deletedrequiredboolean

Library/photo row soft-delete; association is still active until removed.

photo_sourcerequiredstring
formatstring | null
widthinteger | null
heightinteger | null
durationnumber | null
metadataResponseMetadata | null
ResponseMetadata fields

ResponseMetadata, expanded above.

metaResponseMeta | null
ResponseMeta fields

ResponseMeta, expanded above.

  • 400Bad request
  • 401Unauthorized
  • 403Forbidden
  • 404Not found
  • 422Validation error
  • 500Internal server error
  • 503Service unavailable

Error bodies: ErrorResponse. See Errors.

POST/api/v1/admin/businesses/{business_id}/listings/{listing_id}/photos

Add a library photo to a GBP listing (uploads to GBP then links)

Parameters

NameInTypeDescription
business_idrequiredpathstring (uuid)
listing_idrequiredpathstring (uuid)
authorizationheaderstring | null

Request bodyrequired

application/jsonAddListingPhotoBody
FieldTypeDescription
photo_idrequiredstring (uuid)

Responses

200Successful Response
application/jsonSuccessResponse_ListingPhotoItem_
FieldTypeDescription
request_idrequiredstring
successtruedefault true
datarequiredListingPhotoItem
ListingPhotoItem fields

ListingPhotoItem, expanded above.

metadataResponseMetadata | null
ResponseMetadata fields

ResponseMetadata, expanded above.

metaResponseMeta | null
ResponseMeta fields

ResponseMeta, expanded above.

  • 400Bad request
  • 401Unauthorized
  • 403Forbidden
  • 404Not found
  • 422Validation error
  • 500Internal server error
  • 503Service unavailable

Error bodies: ErrorResponse. See Errors.

DELETE/api/v1/admin/businesses/{business_id}/listings/{listing_id}/photos/{photo_id}

Remove a photo from the listing (association soft-delete only)

Parameters

NameInTypeDescription
business_idrequiredpathstring (uuid)
listing_idrequiredpathstring (uuid)
photo_idrequiredpathstring (uuid)
authorizationheaderstring | null

Responses

204Successful Response
  • 400Bad request
  • 401Unauthorized
  • 403Forbidden
  • 404Not found
  • 422Validation error
  • 500Internal server error
  • 503Service unavailable

Error bodies: ErrorResponse. See Errors.

POST/api/v1/admin/businesses/{business_id}/listings/{listing_id}/photos/sync

Enqueue GBP listing media import for one managed listing

Parameters

NameInTypeDescription
business_idrequiredpathstring (uuid)
listing_idrequiredpathstring (uuid)
authorizationheaderstring | null

Request bodyrequired

application/jsonListingPhotosSyncBody
FieldTypeDescription
sync_typeListingSyncTypedefault "backfill"
max_pages_per_channelinteger | null

Max list API pages per channel (owner ``media.list`` and customer ``media.customers.list``); omit for all pages until exhausted.

page_sizeinteger

Items per GBP list request (capped per provider).

default 100 · min 1 · max 500

Responses

200Successful Response
application/jsonSuccessResponse_ListingPhotosSyncEnqueuedData_
FieldTypeDescription
request_idrequiredstring
successtruedefault true
datarequiredListingPhotosSyncEnqueuedData
ListingPhotosSyncEnqueuedData fields
FieldTypeDescription
gbp_location_row_idrequiredstring (uuid)
sync_log_idrequiredstring (uuid)
sync_typerequiredListingSyncType
titlestring | null
enqueuedbooleandefault true
metadataResponseMetadata | null
ResponseMetadata fields

ResponseMetadata, expanded above.

metaResponseMeta | null
ResponseMeta fields

ResponseMeta, expanded above.

  • 400Bad request
  • 401Unauthorized
  • 403Forbidden
  • 404Not found
  • 422Validation error
  • 500Internal server error
  • 503Service unavailable

Error bodies: ErrorResponse. See Errors.

POST/api/v1/admin/businesses/{business_id}/listings/{listing_id}/photos/sync-logs/{sync_log_id}/resume

Resume or retry a PARTIAL/FAILED GBP listing media sync log (background)

Parameters

NameInTypeDescription
business_idrequiredpathstring (uuid)
listing_idrequiredpathstring (uuid)
sync_log_idrequiredpathstring (uuid)
authorizationheaderstring | null

Request bodyrequired

application/jsonListingPhotosSyncResumeBody
FieldTypeDescription
max_pages_per_channelinteger | null

Cap GBP list pages **per channel** for this resume segment.

page_sizeinteger

Items per GBP list request.

default 100 · min 1 · max 500

Responses

200Successful Response
application/jsonSuccessResponse_ListingPhotosSyncResumeEnqueuedData_
FieldTypeDescription
request_idrequiredstring
successtruedefault true
datarequiredListingPhotosSyncResumeEnqueuedData
ListingPhotosSyncResumeEnqueuedData fields
FieldTypeDescription
gbp_location_row_idrequiredstring (uuid)
sync_log_idrequiredstring (uuid)
titlestring | null
enqueuedbooleandefault true
metadataResponseMetadata | null
ResponseMetadata fields

ResponseMetadata, expanded above.

metaResponseMeta | null
ResponseMeta fields

ResponseMeta, expanded above.

  • 400Bad request
  • 401Unauthorized
  • 403Forbidden
  • 404Not found
  • 422Validation error
  • 500Internal server error
  • 503Service unavailable

Error bodies: ErrorResponse. See Errors.

GET/api/v1/admin/businesses/{business_id}/listings/{listing_id}/reviews

List provider reviews stored for a managed listing

Parameters

NameInTypeDescription
business_idrequiredpathstring (uuid)
listing_idrequiredpathstring (uuid)
limitqueryintegerdefault 20
cursorquerystring | null
sort_byquerystringdefault "updated_desc"
rating_minqueryinteger | null
rating_maxqueryinteger | null
authorizationheaderstring | null

Responses

200Successful Response
application/jsonSuccessResponse_list_ListingReviewData__
FieldTypeDescription
request_idrequiredstring
successtruedefault true
datarequiredListingReviewData[]
ListingReviewData[] fields
FieldTypeDescription
idrequiredstring (uuid)
business_idrequiredstring (uuid)
providerrequiredListingProvider
listing_idrequiredstring (uuid)
provider_review_idrequiredstring
provider_resource_namerequiredstring
reviewer_display_namerequiredstring | null
reviewer_profile_photo_urlrequiredstring | null
reviewer_is_anonymousrequiredboolean
ratingrequiredinteger | null
bodyrequiredstring | null
languagerequiredstring | null
permalink_urlrequiredstring | null
provider_created_atrequiredstring (date-time) | null
provider_updated_atrequiredstring (date-time) | null
statusrequiredListingReviewStatus
review_metadatarequiredobject | null
is_featuredbooleandefault false
created_atrequiredstring (date-time)
updated_atrequiredstring (date-time)
metadataResponseMetadata | null
ResponseMetadata fields

ResponseMetadata, expanded above.

metaResponseMeta | null
ResponseMeta fields

ResponseMeta, expanded above.

  • 400Bad request
  • 401Unauthorized
  • 403Forbidden
  • 404Not found
  • 422Validation error
  • 500Internal server error
  • 503Service unavailable

Error bodies: ErrorResponse. See Errors.

POST/api/v1/admin/businesses/{business_id}/listings/{listing_id}/reviews/sync

Enqueue provider review sync for one managed listing

Parameters

NameInTypeDescription
business_idrequiredpathstring (uuid)
listing_idrequiredpathstring (uuid)
authorizationheaderstring | null

Request bodyrequired

application/jsonListingReviewsSyncBody
FieldTypeDescription
sync_typeListingSyncTypedefault "incremental"
max_pagesinteger | null

Cap provider list pages for this run (omit for natural stop).

page_sizeinteger

Reviews per list page.

default 50 · min 1 · max 100

Responses

200Successful Response
application/jsonSuccessResponse_ListingReviewsSyncEnqueuedData_
FieldTypeDescription
request_idrequiredstring
successtruedefault true
datarequiredListingReviewsSyncEnqueuedData
ListingReviewsSyncEnqueuedData fields
FieldTypeDescription
listing_idrequiredstring (uuid)
sync_log_idrequiredstring (uuid)
sync_typerequiredListingSyncType
titlestring | null
enqueuedbooleandefault true
metadataResponseMetadata | null
ResponseMetadata fields

ResponseMetadata, expanded above.

metaResponseMeta | null
ResponseMeta fields

ResponseMeta, expanded above.

  • 400Bad request
  • 401Unauthorized
  • 403Forbidden
  • 404Not found
  • 422Validation error
  • 500Internal server error
  • 503Service unavailable

Error bodies: ErrorResponse. See Errors.

POST/api/v1/admin/businesses/{business_id}/listings/{listing_id}/reviews/sync-logs/{sync_log_id}/resume

Resume or retry a PARTIAL/FAILED listing review sync log

Parameters

NameInTypeDescription
business_idrequiredpathstring (uuid)
listing_idrequiredpathstring (uuid)
sync_log_idrequiredpathstring (uuid)
authorizationheaderstring | null

Request bodyrequired

application/jsonListingReviewsSyncResumeBody
FieldTypeDescription
max_pagesinteger | null
page_sizeintegerdefault 50 · min 1 · max 100

Responses

200Successful Response
application/jsonSuccessResponse_ListingReviewsSyncResumeEnqueuedData_
FieldTypeDescription
request_idrequiredstring
successtruedefault true
datarequiredListingReviewsSyncResumeEnqueuedData
ListingReviewsSyncResumeEnqueuedData fields
FieldTypeDescription
listing_idrequiredstring (uuid)
sync_log_idrequiredstring (uuid)
titlestring | null
enqueuedbooleandefault true
metadataResponseMetadata | null
ResponseMetadata fields

ResponseMetadata, expanded above.

metaResponseMeta | null
ResponseMeta fields

ResponseMeta, expanded above.

  • 400Bad request
  • 401Unauthorized
  • 403Forbidden
  • 404Not found
  • 422Validation error
  • 500Internal server error
  • 503Service unavailable

Error bodies: ErrorResponse. See Errors.

POST/api/v1/admin/listings/gbp/refresh-all

Re-fetch overview + platform metadata for EVERY GBP listing (all businesses)

Fleet-wide backfill: pull each GBP listing's live overview + ``metadata`` block (``placeId`` / ``mapsUri`` / ``newReviewUri``) and persist it. One call fixes every business whose ``location_metadata`` was frozen stale at discovery time, so the conversational agent's Google-review link resolves per business (KS-866). Returns ``{total, refreshed, failed}``; per-listing failures are isolated (savepoint) and do not abort the run.

Parameters

NameInTypeDescription
authorizationheaderstring | null

Responses

200Successful Response
application/jsonSuccessResponse_dict_
FieldTypeDescription
request_idrequiredstring
successtruedefault true
datarequiredobject
metadataResponseMetadata | null
ResponseMetadata fields

ResponseMetadata, expanded above.

metaResponseMeta | null
ResponseMeta fields

ResponseMeta, expanded above.

  • 400Bad request
  • 401Unauthorized
  • 403Forbidden
  • 404Not found
  • 422Validation error
  • 500Internal server error
  • 503Service unavailable

Error bodies: ErrorResponse. See Errors.