Signal API
Listings as MarkdownUse a clean Markdown version of this page with an agent or local tooling.

Listings

Read a location's configured listing identity, observed profile, scheduled scan records, and listing findings.

Listings are available for locations only and are read-only. Scans are generated by scheduled analysis and cannot be started through these endpoints. A location must have a configured place and a location package with listings enabled before scheduled analysis can produce scan data. Historical scans and findings remain available after listings are disabled or unconfigured.
AuthenticationSend a platform API key in the Authorization header as Bearer ceyo_platform_..., or in X-Api-Key. The key requires listings:read and access to the requested project and location. Project and location path identifiers accept Ceyo UUIDs or partner external IDs.
GET
/projects/{project_id}/locations/{location_id}/listings/profile

Returns the listing identity, newest retained profile, and latest scan summary for a location.

Parameters

Path parameters

project_idproject UUID | project external ID

Project identifier.

Required
location_idlocation UUID | location external ID

Location identifier belonging to the project.

Required
Response

Response envelope

listing:ConfiguredListing | nullprofile:ListingProfile | nulllatest_scan:ScanSummary | null
listingConfiguredListing | null

Configured listing identity, or null when listings are disabled or the location has no configured place.

profileListingProfile | null

Profile from the newest succeeded scan with available profile data, or null when unavailable.

latest_scanScanSummary | null

Newest listing scan summary, or null before any scan.

Object

ConfiguredListing

namestring

Configured listing or location name.

addressstring | null

Configured location address.

google_maps_urlstring | null

Public Google Maps URL for the configured place.

Object

ListingProfile

place_idstring

Place identifier represented by this profile.

namestring | null

Public business name.

formatted_addressstring | null

Publicly formatted business address.

website_urlstring | null

Public website linked from the listing.

national_phone_numberstring | null

Phone number formatted for the listing country.

international_phone_numberstring | null

Phone number in international format.

google_maps_urlstring | null

Public Google Maps URL.

business_statusstring | null

Current public operating status.

primary_typestring | null

Machine-readable primary business type.

primary_type_display_namestring | null

Display name for the primary business type.

typesstring[]

Normalized business type keys associated with the place.

ratingnumber | null

Public average review rating.

review_countinteger | null

Number of public ratings represented by the average.

regular_opening_hoursOpeningHours | null

Normalized weekly opening schedule and special-day notices.

editorial_summarystring | null

Public editorial description of the business.

reviewsReview[]

Up to the 50 most recent public reviews available with the profile.

attributesListingAttributes

Normalized service, accessibility, parking, payment, dining, and amenity attributes.

Object

OpeningHours

open_nowboolean | null

Whether the business is open at the profile observation time.

periodsOpeningPeriod[]

Weekly periods containing open and, when applicable, close day and time values.

weekday_descriptionsstring[]

Human-readable hours for each represented weekday.

special_daysSpecialDay[]

Special-day entries with an ISO date and an exceptional_hours flag.

Object

OpeningPeriod

openOpeningPoint

Opening point with day, hour, minute, and optional date.

closeOpeningPoint | null

Closing point when the period has a defined close time.

Object

OpeningPoint

dayinteger

Day of week from 0 (Sunday) through 6 (Saturday).

hourinteger

Hour from 0 through 23.

minuteinteger

Minute from 0 through 59.

datedate

Calendar date when the point represents a dated schedule. Omitted otherwise.

Object

SpecialDay

dateISO date

Calendar date in YYYY-MM-DD format.

exceptional_hoursboolean

Whether the date uses hours that differ from the regular schedule.

Object

Review

ratingnumber | null

Review rating.

textstring | null

Public review text.

publish_timedatetime | null

Review publication time.

relative_publish_timestring | null

Human-readable relative publication time.

google_maps_urlstring | null

Public Google Maps URL for the review.

authorReviewAuthor | null

Public reviewer attribution when available.

Object

ReviewAuthor

display_namestring | null

Public display name of the reviewer.

uristring | null

Public reviewer profile URL.

photo_uristring | null

Public reviewer profile image URL.

Object

ListingAttributes

accessibility_optionsBooleanAttributeMap

Normalized boolean accessibility options keyed by snake_case attribute names.

payment_optionsBooleanAttributeMap

Normalized boolean payment options keyed by snake_case attribute names.

parking_optionsBooleanAttributeMap

Normalized boolean parking options keyed by snake_case attribute names.

deliveryboolean | null

Whether delivery is offered.

dine_inboolean | null

Whether dine-in service is offered.

takeoutboolean | null

Whether takeout is offered.

reservableboolean | null

Whether reservations are accepted.

serves_breakfastboolean | null

Whether breakfast is served.

serves_lunchboolean | null

Whether lunch is served.

serves_dinnerboolean | null

Whether dinner is served.

serves_beerboolean | null

Whether beer is served.

serves_wineboolean | null

Whether wine is served.

serves_vegetarian_foodboolean | null

Whether vegetarian food is served.

Object

BooleanAttributeMap

{attribute_name}boolean

Boolean value keyed by a snake_case accessibility, payment, or parking attribute name.

Object

ScanSummary

iduuid

Listing scan identifier.

statuspending | running | succeeded | failed | skipped

Current or terminal scan status.

scoreinteger | null

Listing quality score from 0 to 100 when available.

gradestrong | good | needs_attention | weak | null

Quality grade derived from the score.

error_messagestring | null

Customer-safe explanation when the scan failed.

completed_atdatetime | null

Time scan processing reached a terminal status.

created_atdatetime

Time the scan was created.

Provider field availabilityProfile, review, author, and attribute objects are sparse. Provider fields are omitted when unavailable; fields explicitly documented as nullable may be returned as null.
Profile availabilityprofile is selected from the newest succeeded scan with a non-empty retained profile. It is null when no such profile is available. Detailed profile data is retained for 29 days; historical scan scores and checks remain available through the scan endpoints.
Disabled or unconfigured listingsThis endpoint returns 200 when no listing data is available. In that case, listing, profile, and latest_scan are null.

Request and response

Example requestcURL
curl --request GET \
  --url 'https://api.signal.ceyo.ai/v1/projects/{project_id}/locations/{location_id}/listings/profile' \
  --header 'Authorization: Bearer ceyo_platform_...'
Example responseJSON
{
  "listing": {
    "name": "Harbour Coffee",
    "address": "12 Market Street, Dublin 2, Ireland",
    "google_maps_url": "https://maps.google.com/?cid=123456789"
  },
  "profile": {
    "place_id": "ChIJN1t_tDeuEmsRUsoyG83frY4",
    "name": "Harbour Coffee",
    "formatted_address": "12 Market Street, Dublin 2, Ireland",
    "website_url": "https://harbourcoffee.example",
    "national_phone_number": "01 555 0142",
    "international_phone_number": "+353 1 555 0142",
    "google_maps_url": "https://maps.google.com/?cid=123456789",
    "business_status": "OPERATIONAL",
    "primary_type": "coffee_shop",
    "primary_type_display_name": "Coffee shop",
    "types": ["coffee_shop", "cafe", "food"],
    "rating": 4.6,
    "review_count": 187,
    "regular_opening_hours": {
      "open_now": true,
      "periods": [
        {
          "open": {"day": 1, "hour": 7, "minute": 30},
          "close": {"day": 1, "hour": 18, "minute": 0}
        }
      ],
      "weekday_descriptions": [
        "Monday: 7:30 AM – 6:00 PM",
        "Tuesday: 7:30 AM – 6:00 PM"
      ],
      "special_days": [
        {
          "date": "2026-08-03",
          "exceptional_hours": true
        }
      ]
    },
    "editorial_summary": "Independent coffee shop serving seasonal drinks.",
    "reviews": [
      {
        "rating": 5,
        "text": "Friendly team and excellent coffee.",
        "publish_time": "2026-07-25T11:14:00Z",
        "relative_publish_time": "a week ago",
        "google_maps_url": "https://maps.google.com/reviews/example",
        "author": {
          "display_name": "A. Customer",
          "uri": "https://maps.google.com/maps/contrib/456",
          "photo_uri": "https://lh3.googleusercontent.com/a/reviewer"
        }
      }
    ],
    "attributes": {
      "accessibility_options": {"wheelchair_accessible_entrance": true},
      "payment_options": {"accepts_credit_cards": true},
      "parking_options": {"street_parking": true},
      "delivery": false,
      "dine_in": true,
      "takeout": true,
      "reservable": false,
      "serves_breakfast": true,
      "serves_lunch": true,
      "serves_dinner": false,
      "serves_beer": false,
      "serves_wine": false,
      "serves_vegetarian_food": true
    }
  },
  "latest_scan": {
    "id": "ea0c4cdd-430e-444e-8446-cbe8d47edb56",
    "status": "succeeded",
    "score": 82,
    "grade": "good",
    "error_message": null,
    "completed_at": "2026-07-30T09:40:03Z",
    "created_at": "2026-07-30T09:39:58Z"
  }
}
ErrorsResponse format and status codes
Errors

Error response envelope

errorError

Structured error payload.

Errors

Error

codestring

Stable snake_case code suitable for programmatic handling.

messagestring

Human-readable explanation of the failure.

detailsobject | array | null

Structured validation or request context when available.

request_idstring

Identifier to provide when requesting support.

Example error responseJSON
{
  "error": {
    "code": "not_found",
    "message": "The requested resource was not found.",
    "details": null,
    "request_id": "req_01K1JQY1RQQ7N3C5H1K6J0P8AT"
  }
}
Errors

Status codes

401invalid_api_key

The API key is absent, invalid, expired, or revoked.

403forbidden

The API key lacks listings:read or cannot access the requested location.

404not_found

The project, location, or visibility scope was not found.

429rate_limit_exceeded

Too many requests were made.

GET
/projects/{project_id}/locations/{location_id}/listings/scans

Returns listing scan summaries for a location, ordered newest first.

Parameters

Path parameters

project_idproject UUID | project external ID

Project identifier.

Required
location_idlocation UUID | location external ID

Location identifier belonging to the project.

Required
Parameters

Query parameters

pageinteger

The 1-based page number.

OptionalDefault: 1
per_pageinteger

Number of scans per page. Maximum: 50.

OptionalDefault: 20
Response

Response envelope

scans:ScanSummary[]pagination:Pagination
scansScanSummary[]

Scan summaries ordered newest first.

paginationPagination

Pagination metadata.

Object

ScanSummary

iduuid

Listing scan identifier.

statuspending | running | succeeded | failed | skipped

Current or terminal scan status.

scoreinteger | null

Listing quality score from 0 to 100 when available.

gradestrong | good | needs_attention | weak | null

Quality grade derived from the score.

error_messagestring | null

Customer-safe explanation when the scan failed.

completed_atdatetime | null

Time scan processing reached a terminal status.

created_atdatetime

Time the scan was created.

Object

Pagination

pageinteger

Current 1-based page.

per_pageinteger

Number of records requested per page.

totalinteger

Total records matching the request.

total_pagesinteger

Total available pages.

Scheduled scansThis endpoint reports scan records. Scans are created by scheduled listing analysis and cannot be started from the Listings API.

Request and response

Example requestcURL
curl --request GET \
  --url 'https://api.signal.ceyo.ai/v1/projects/{project_id}/locations/{location_id}/listings/scans?page=1&per_page=20' \
  --header 'Authorization: Bearer ceyo_platform_...'
Example responseJSON
{
  "scans": [
    {
      "id": "ea0c4cdd-430e-444e-8446-cbe8d47edb56",
      "status": "succeeded",
      "score": 82,
      "grade": "good",
      "error_message": null,
      "completed_at": "2026-07-30T09:40:03Z",
      "created_at": "2026-07-30T09:39:58Z"
    },
    {
      "id": "04af8634-f960-47cb-9522-98714f87ff36",
      "status": "failed",
      "score": null,
      "grade": null,
      "error_message": "Listing scan did not complete.",
      "completed_at": "2026-07-23T09:40:08Z",
      "created_at": "2026-07-23T09:39:58Z"
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 20,
    "total": 9,
    "total_pages": 1
  }
}
ErrorsResponse format and status codes
Errors

Error response envelope

errorError

Structured error payload.

Errors

Error

codestring

Stable snake_case code suitable for programmatic handling.

messagestring

Human-readable explanation of the failure.

detailsobject | array | null

Structured validation or request context when available.

request_idstring

Identifier to provide when requesting support.

Example error responseJSON
{
  "error": {
    "code": "validation_failed",
    "message": "page must be positive and per_page must be between 1 and 50.",
    "details": null,
    "request_id": "req_01K1JQY1RQQ7N3C5H1K6J0P8AT"
  }
}
Errors

Status codes

401invalid_api_key

The API key is absent, invalid, expired, or revoked.

403forbidden

The API key lacks listings:read or cannot access the requested location.

404not_found

The project, location, or visibility scope was not found.

422validation_failed

page or per_page is outside the supported range.

429rate_limit_exceeded

Too many requests were made.

GET
/projects/{project_id}/locations/{location_id}/listings/scans/{scan_id}

Returns one listing scan with its complete scored result and checks.

Parameters

Path parameters

project_idproject UUID | project external ID

Project identifier.

Required
location_idlocation UUID | location external ID

Location identifier belonging to the project.

Required
scan_iduuid

Listing scan identifier.

Required
Response

Response envelope

scan:ListingScan

Requested listing scan and its complete result.

Object

ListingScan

iduuid

Listing scan identifier.

statuspending | running | succeeded | failed | skipped

Current or terminal scan status.

scoreinteger | null

Listing quality score from 0 to 100 when available.

gradestrong | good | needs_attention | weak | null

Quality grade derived from the score.

error_messagestring | null

Customer-safe explanation when the scan failed.

completed_atdatetime | null

Time scan processing reached a terminal status.

created_atdatetime

Time the scan was created.

resultScanResult | null

Complete scored result on the single-scan endpoint. Null for unscored, failed, or skipped scans.

Object

ScanResult

scoreinteger

Overall listing quality score from 0 to 100.

gradestrong | good | needs_attention | weak

Overall grade derived from the score.

summarystring

Short interpretation of the listing assessment.

profileListingProfile | null

Profile observed for this scan, or null when detailed profile data is no longer retained.

checksListingCheck[]

Scored checks that contributed to the result.

Object

ListingCheck

labelstring

Human-readable check label.

statuspassed | warning | failed

Check outcome.

scoreinteger

Points awarded by this check.

severitylow | medium | high

Importance of the observed condition.

categorystring

Category used to group related checks.

messagestring

Explanation of the observed condition.

recommendationstring

Recommended response to the check outcome.

Object

ListingProfile

place_idstring

Place identifier represented by this profile.

namestring | null

Public business name.

formatted_addressstring | null

Publicly formatted business address.

website_urlstring | null

Public website linked from the listing.

national_phone_numberstring | null

Phone number formatted for the listing country.

international_phone_numberstring | null

Phone number in international format.

google_maps_urlstring | null

Public Google Maps URL.

business_statusstring | null

Current public operating status.

primary_typestring | null

Machine-readable primary business type.

primary_type_display_namestring | null

Display name for the primary business type.

typesstring[]

Normalized business type keys associated with the place.

ratingnumber | null

Public average review rating.

review_countinteger | null

Number of public ratings represented by the average.

regular_opening_hoursOpeningHours | null

Normalized weekly opening schedule and special-day notices.

editorial_summarystring | null

Public editorial description of the business.

reviewsReview[]

Up to the 50 most recent public reviews available with the profile.

attributesListingAttributes

Normalized service, accessibility, parking, payment, dining, and amenity attributes.

Object

OpeningHours

open_nowboolean | null

Whether the business is open at the profile observation time.

periodsOpeningPeriod[]

Weekly periods containing open and, when applicable, close day and time values.

weekday_descriptionsstring[]

Human-readable hours for each represented weekday.

special_daysSpecialDay[]

Special-day entries with an ISO date and an exceptional_hours flag.

Object

OpeningPeriod

openOpeningPoint

Opening point with day, hour, minute, and optional date.

closeOpeningPoint | null

Closing point when the period has a defined close time.

Object

OpeningPoint

dayinteger

Day of week from 0 (Sunday) through 6 (Saturday).

hourinteger

Hour from 0 through 23.

minuteinteger

Minute from 0 through 59.

datedate

Calendar date when the point represents a dated schedule. Omitted otherwise.

Object

SpecialDay

dateISO date

Calendar date in YYYY-MM-DD format.

exceptional_hoursboolean

Whether the date uses hours that differ from the regular schedule.

Object

Review

ratingnumber | null

Review rating.

textstring | null

Public review text.

publish_timedatetime | null

Review publication time.

relative_publish_timestring | null

Human-readable relative publication time.

google_maps_urlstring | null

Public Google Maps URL for the review.

authorReviewAuthor | null

Public reviewer attribution when available.

Object

ReviewAuthor

display_namestring | null

Public display name of the reviewer.

uristring | null

Public reviewer profile URL.

photo_uristring | null

Public reviewer profile image URL.

Object

ListingAttributes

accessibility_optionsBooleanAttributeMap

Normalized boolean accessibility options keyed by snake_case attribute names.

payment_optionsBooleanAttributeMap

Normalized boolean payment options keyed by snake_case attribute names.

parking_optionsBooleanAttributeMap

Normalized boolean parking options keyed by snake_case attribute names.

deliveryboolean | null

Whether delivery is offered.

dine_inboolean | null

Whether dine-in service is offered.

takeoutboolean | null

Whether takeout is offered.

reservableboolean | null

Whether reservations are accepted.

serves_breakfastboolean | null

Whether breakfast is served.

serves_lunchboolean | null

Whether lunch is served.

serves_dinnerboolean | null

Whether dinner is served.

serves_beerboolean | null

Whether beer is served.

serves_wineboolean | null

Whether wine is served.

serves_vegetarian_foodboolean | null

Whether vegetarian food is served.

Object

BooleanAttributeMap

{attribute_name}boolean

Boolean value keyed by a snake_case accessibility, payment, or parking attribute name.

Provider field availabilityProfile, review, author, and attribute objects are sparse. Provider fields are omitted when unavailable; fields explicitly documented as nullable may be returned as null.
Retained resultsThe score, grade, summary, and checks remain available for a completed scan. Detailed profile data is retained for 29 days, so the result's profile is null after that period while scores and checks persist.

Request and response

Example requestcURL
curl --request GET \
  --url 'https://api.signal.ceyo.ai/v1/projects/{project_id}/locations/{location_id}/listings/scans/{scan_id}' \
  --header 'Authorization: Bearer ceyo_platform_...'
Example responseJSON
{
  "scan": {
    "id": "ea0c4cdd-430e-444e-8446-cbe8d47edb56",
    "status": "succeeded",
    "score": 82,
    "grade": "good",
    "result": {
      "score": 82,
      "grade": "good",
      "summary": "The profile is healthy, with a few worthwhile improvements.",
      "profile": {
        "place_id": "ChIJN1t_tDeuEmsRUsoyG83frY4",
        "name": "Harbour Coffee",
        "formatted_address": "12 Market Street, Dublin 2, Ireland",
        "website_url": "https://harbourcoffee.example",
        "national_phone_number": "01 555 0142",
        "international_phone_number": "+353 1 555 0142",
        "google_maps_url": "https://maps.google.com/?cid=123456789",
        "business_status": "OPERATIONAL",
        "primary_type": "coffee_shop",
        "primary_type_display_name": "Coffee shop",
        "types": ["coffee_shop", "cafe", "food"],
        "rating": 4.6,
        "review_count": 187,
        "regular_opening_hours": {
          "open_now": true,
          "periods": [],
          "weekday_descriptions": ["Monday: 7:30 AM – 6:00 PM"],
          "special_days": [
            {
              "date": "2026-08-03",
              "exceptional_hours": true
            }
          ]
        },
        "editorial_summary": "Independent coffee shop serving seasonal drinks.",
        "reviews": [],
        "attributes": {
          "delivery": false,
          "dine_in": true,
          "takeout": true
        }
      },
      "checks": [
        {
          "label": "Business name",
          "status": "passed",
          "score": 10,
          "severity": "medium",
          "category": "identity_consistency",
          "message": "The profile name matches the configured location.",
          "recommendation": "Keep the configured and public names aligned."
        },
        {
          "label": "Business hours",
          "status": "warning",
          "score": 8,
          "severity": "medium",
          "category": "profile_completeness",
          "message": "The profile exposes only partial business hours.",
          "recommendation": "Add complete regular and special hours."
        }
      ]
    },
    "error_message": null,
    "completed_at": "2026-07-30T09:40:03Z",
    "created_at": "2026-07-30T09:39:58Z"
  }
}
ErrorsResponse format and status codes
Errors

Error response envelope

errorError

Structured error payload.

Errors

Error

codestring

Stable snake_case code suitable for programmatic handling.

messagestring

Human-readable explanation of the failure.

detailsobject | array | null

Structured validation or request context when available.

request_idstring

Identifier to provide when requesting support.

Example error responseJSON
{
  "error": {
    "code": "not_found",
    "message": "The requested resource was not found.",
    "details": null,
    "request_id": "req_01K1JQY1RQQ7N3C5H1K6J0P8AT"
  }
}
Errors

Status codes

401invalid_api_key

The API key is absent, invalid, expired, or revoked.

403forbidden

The API key lacks listings:read or cannot access the requested location.

404not_found

The project, location, visibility scope, or listing scan was not found.

429rate_limit_exceeded

Too many requests were made.

GET
/projects/{project_id}/locations/{location_id}/listings/findings

Returns listing findings for a location with filtering and pagination.

Parameters

Path parameters

project_idproject UUID | project external ID

Project identifier.

Required
location_idlocation UUID | location external ID

Location identifier belonging to the project.

Required
Parameters

Query parameters

statusopen | resolved | ignored | all

Restrict findings by lifecycle status. Use all to include every status.

OptionalDefault: open
severityinfo | low | medium | high | critical

Restrict findings to one severity.

Optional
categorystring

Restrict findings to one category.

Optional
qstring

Search finding titles, descriptions, recommendations, and targets. Maximum: 200 characters.

Optional
pageinteger

The 1-based page number.

OptionalDefault: 1
per_pageinteger

Number of findings per page. Maximum: 50.

OptionalDefault: 20
Response

Response envelope

findings:ListingFinding[]pagination:Pagination
findingsListingFinding[]

Findings matching the selected filters.

paginationPagination

Pagination metadata.

Object

ListingFinding

categorystring

Category used to group related findings.

severityinfo | low | medium | high | critical

Finding importance.

statusopen | resolved | ignored

Current finding lifecycle status.

targetstring | null

Public target value when available.

titlestring

Short finding title.

descriptionstring | null

Evidence-backed explanation of the finding.

recommendationstring | null

Recommended response to the finding.

first_seen_atdatetime

Time the finding was first observed.

last_seen_atdatetime

Time the finding was most recently observed.

resolved_atdatetime | null

Time the finding was resolved.

created_atdatetime

Time the finding was created.

updated_atdatetime

Time the finding was most recently updated.

Object

Pagination

pageinteger

Current 1-based page.

per_pageinteger

Number of records requested per page.

totalinteger

Total records matching the request.

total_pagesinteger

Total available pages.

OrderingFindings are returned by most recent last_seen_at, with a stable identifier tie-breaker.

Request and response

Example requestcURL
curl --request GET \
  --url 'https://api.signal.ceyo.ai/v1/projects/{project_id}/locations/{location_id}/listings/findings?status=open&severity=medium&page=1&per_page=20' \
  --header 'Authorization: Bearer ceyo_platform_...'
Example responseJSON
{
  "findings": [
    {
      "category": "profile_completeness",
      "severity": "medium",
      "status": "open",
      "target": "ChIJN1t_tDeuEmsRUsoyG83frY4",
      "title": "Business hours",
      "description": "The profile exposes only partial business hours.",
      "recommendation": "Add complete regular and special hours.",
      "first_seen_at": "2026-07-16T09:40:03Z",
      "last_seen_at": "2026-07-30T09:40:03Z",
      "resolved_at": null,
      "created_at": "2026-07-16T09:40:03Z",
      "updated_at": "2026-07-30T09:40:03Z"
    }
  ],
  "pagination": {
    "page": 1,
    "per_page": 20,
    "total": 1,
    "total_pages": 1
  }
}
ErrorsResponse format and status codes
Errors

Error response envelope

errorError

Structured error payload.

Errors

Error

codestring

Stable snake_case code suitable for programmatic handling.

messagestring

Human-readable explanation of the failure.

detailsobject | array | null

Structured validation or request context when available.

request_idstring

Identifier to provide when requesting support.

Example error responseJSON
{
  "error": {
    "code": "invalid_filter",
    "message": "status is not a valid listing finding filter.",
    "details": {
      "status": ["is not supported"]
    },
    "request_id": "req_01K1JQY1RQQ7N3C5H1K6J0P8AT"
  }
}
Errors

Status codes

400invalid_filter

A finding filter is invalid or q is longer than 200 characters.

401invalid_api_key

The API key is absent, invalid, expired, or revoked.

403forbidden

The API key lacks listings:read or cannot access the requested location.

404not_found

The project, location, or visibility scope was not found.

422validation_failed

page or per_page is outside the supported range.

429rate_limit_exceeded

Too many requests were made.