Vendasta Reputation API (gRPC gateway)

The fuller Reputation surface through the gRPC gateway: ListingService, ReviewService and NetPromoterScoreService — 17 operations covering listings, reviews and NPS data for the business locations an app has access to.

OpenAPI Specification

vendasta-reputation-grpc-openapi.json Raw ↑
{
  "components": {
    "schemas": {
      "ListingMatchQuality": {
        "default": "LISTING_MATCH_QUALITY_GOOD",
        "enum": [
          "LISTING_MATCH_QUALITY_GOOD",
          "LISTING_MATCH_QUALITY_POOR",
          "LISTING_MATCH_QUALITY_NO_MATCH"
        ],
        "type": "string"
      },
      "protobufAny": {
        "additionalProperties": {},
        "properties": {
          "@type": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "rpcStatus": {
        "properties": {
          "code": {
            "format": "int32",
            "type": "integer"
          },
          "details": {
            "items": {
              "$ref": "#/components/schemas/protobufAny"
            },
            "type": "array"
          },
          "message": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "v1CanRespondToReviewRequest": {
        "description": "Request message for checking whether a review supports responses.",
        "properties": {
          "businessId": {
            "description": "Required. The ID of the business owning the review.",
            "type": "string"
          },
          "reviewId": {
            "description": "Required. The ID of the review being responded to.",
            "type": "string"
          }
        },
        "required": [
          "businessId",
          "reviewId"
        ],
        "title": "Can Respond To Review Request",
        "type": "object"
      },
      "v1CanRespondToReviewResponse": {
        "description": "Response message indicating whether a review supports responses.",
        "properties": {
          "canRespond": {
            "description": "Output only. Represents whether or not the response is supported.",
            "readOnly": true,
            "type": "boolean"
          },
          "unsupportedReason": {
            "description": "Output only. A message with the reason the review doesn't support responses.",
            "readOnly": true,
            "type": "string"
          }
        },
        "title": "Can Respond To Review Response",
        "type": "object"
      },
      "v1CommunicationChannel": {
        "default": "COMMUNICATION_CHANNEL_UNSPECIFIED",
        "enum": [
          "COMMUNICATION_CHANNEL_UNSPECIFIED",
          "COMMUNICATION_CHANNEL_EMAIL",
          "COMMUNICATION_CHANNEL_SMS"
        ],
        "type": "string"
      },
      "v1ContactDetails": {
        "description": "Information about the customer (contact) who submitted the NPS score.",
        "properties": {
          "email": {
            "description": "Output only. Customer’s email address, if available.",
            "readOnly": true,
            "type": "string"
          },
          "name": {
            "description": "Output only. Customer’s full name.",
            "readOnly": true,
            "type": "string"
          },
          "phone": {
            "description": "Output only. Customer’s phone number, if available.",
            "readOnly": true,
            "type": "string"
          }
        },
        "title": "Contact Details",
        "type": "object"
      },
      "v1CreateReviewCommentRequest": {
        "description": "Request message for creating a comment on a review.",
        "properties": {
          "commentText": {
            "description": "Required. The text content of the comment.",
            "type": "string"
          },
          "commenterEmail": {
            "description": "Optional. The email of the commenter.",
            "type": "string"
          },
          "commenterName": {
            "description": "Optional. The name of the commenter.",
            "type": "string"
          },
          "postedByDigitalAgent": {
            "description": "Optional. Whether this comment is posted by a digital agent.",
            "type": "boolean"
          },
          "postedByOwner": {
            "description": "Optional. Whether this comment is posted by the listing owner.",
            "type": "boolean"
          },
          "reviewId": {
            "$ref": "#/components/schemas/v1ReviewIdentifier"
          },
          "shouldPublish": {
            "description": "Optional. Whether the comment should be published immediately.",
            "type": "boolean"
          }
        },
        "required": [
          "reviewId",
          "commentText"
        ],
        "title": "Create Review Comment Request",
        "type": "object"
      },
      "v1CreateReviewCommentResponse": {
        "description": "Response message containing the created review comment details.",
        "properties": {
          "commentId": {
            "description": "Output only. The ID of the created comment.",
            "readOnly": true,
            "type": "string"
          },
          "commentText": {
            "description": "Output only. The text content of the comment.",
            "readOnly": true,
            "type": "string"
          },
          "commenterName": {
            "description": "Output only. The name of the commenter.",
            "readOnly": true,
            "type": "string"
          },
          "created": {
            "description": "Output only. The creation date of the comment.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "postedByOwner": {
            "description": "Output only. Whether this comment is a post by the owner of the listing being reviewed.",
            "readOnly": true,
            "type": "boolean"
          },
          "published": {
            "description": "Output only. The published date of the comment.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          }
        },
        "title": "Create Review Comment Response",
        "type": "object"
      },
      "v1ForceRefreshListingRequest": {
        "description": "Request message to force refresh a specific listing.",
        "properties": {
          "accountGroupId": {
            "description": "Required. The account group ID which the listing belongs to.",
            "type": "string"
          },
          "listingId": {
            "description": "Required. The ID of the listing which needs to be force refreshed.",
            "type": "string"
          },
          "listingUrl": {
            "description": "Optional. The URL of the listing which needs to be force refreshed.",
            "type": "string"
          },
          "sourceId": {
            "description": "Optional. The source of the listing.",
            "format": "int64",
            "type": "string"
          }
        },
        "required": [
          "accountGroupId",
          "listingId"
        ],
        "title": "Force Refresh Listing Request",
        "type": "object"
      },
      "v1GetListingsRequest": {
        "description": "Request message for retrieving a set of listings by their identifiers.",
        "properties": {
          "listingIds": {
            "description": "Required. A set of listing identifiers to retrieve.",
            "items": {
              "$ref": "#/components/schemas/v1ListingIdentifier"
            },
            "type": "array"
          }
        },
        "required": [
          "listingIds"
        ],
        "title": "Get Listings Request",
        "type": "object"
      },
      "v1GetListingsResponse": {
        "description": "Response message containing the retrieved listings.",
        "properties": {
          "listings": {
            "description": "Output only. The retrieved listings.",
            "items": {
              "$ref": "#/components/schemas/v1Listing"
            },
            "readOnly": true,
            "type": "array"
          }
        },
        "title": "Get Listings Response",
        "type": "object"
      },
      "v1GetMultiThirdPartyReviewPublishSettingsRequest": {
        "description": "Request message for retrieving third-party review publish settings for multiple account groups.",
        "properties": {
          "accountGroupIds": {
            "description": "Required. The account group IDs to retrieve publish settings for.",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "accountGroupIds"
        ],
        "title": "Get Multi Third Party Review Publish Settings Request",
        "type": "object"
      },
      "v1GetMultiThirdPartyReviewPublishSettingsResponse": {
        "description": "Response message containing third-party review publish settings keyed by account group ID.",
        "properties": {
          "thirdPartyReviewPublishSettings": {
            "additionalProperties": {
              "$ref": "#/components/schemas/v1ThirdPartyReviewPublishSettings"
            },
            "description": "Output only. The third-party review publish settings keyed by account group ID.",
            "readOnly": true,
            "type": "object"
          }
        },
        "title": "Get Multi Third Party Review Publish Settings Response",
        "type": "object"
      },
      "v1GetNetPromoterScoreDetailsRequest": {
        "description": "Request message for retrieving NPS redirect configuration details.",
        "properties": {
          "netPromoterScoreId": {
            "description": "Required. The NPS record ID to get details for.",
            "type": "string"
          }
        },
        "required": [
          "netPromoterScoreId"
        ],
        "title": "Get Net Promoter Score Details Request",
        "type": "object"
      },
      "v1GetNetPromoterScoreDetailsResponse": {
        "description": "Response message containing NPS redirect configuration details.",
        "properties": {
          "npsRedirectReviewSource": {
            "description": "Output only. Whether to redirect to the review source when score \u003e= nps_redirect_threshold.",
            "readOnly": true,
            "type": "boolean"
          },
          "npsRedirectThreshold": {
            "description": "Output only. Effective redirect threshold (6-10). Server resolves unset/invalid stored values to the default before returning.",
            "format": "int64",
            "readOnly": true,
            "type": "string"
          },
          "reviewSourceId": {
            "description": "Output only. The review source ID to redirect to.",
            "readOnly": true,
            "type": "string"
          }
        },
        "title": "Get Net Promoter Score Details Response",
        "type": "object"
      },
      "v1GetReviewMetricsRequest": {
        "description": "Request message for retrieving review metrics for one or more business namespaces.",
        "properties": {
          "maxDateTime": {
            "description": "Optional. Filter reviews published on or before this date (RFC3339 UTC, inclusive).",
            "format": "date-time",
            "type": "string"
          },
          "minDateTime": {
            "description": "Optional. Filter reviews published on or after this date (RFC3339 UTC, inclusive).",
            "format": "date-time",
            "type": "string"
          },
          "namespaces": {
            "description": "Required. The IDs of the namespace(s) you wish to get metrics for. A namespace may be an account_group_id (AG-) or multi-location-group (G-).",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "partnerId": {
            "description": "Required. Partner ID of the namespaces provided in the request (e.g., \"ABC\").",
            "type": "string"
          },
          "sourceNames": {
            "description": "Optional. Filter by source platform. To filter multiple platforms, provide multiple elements in the array.\nEach entry in this repeated field must be a single source name Example: [\"Google\", \"Yelp\", \"Facebook\"].",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "splitGroupsIntoAccounts": {
            "description": "Optional. Controls metric aggregation granularity for review data.\nWhen false (default): Returns aggregated metrics at the group level (e.g., for multi-location group G-12345).\nWhen true: Returns metrics split by individual account group IDs within the parent group, providing more detailed breakdowns.\nUse this when you need to analyze performance differences between individual locations or accounts within a larger organizational group.\nExample: A franchise with 10 locations would get 10 separate metric entries instead of 1 combined entry.",
            "type": "boolean"
          }
        },
        "required": [
          "namespaces",
          "partnerId"
        ],
        "title": "Get Review Metrics Request",
        "type": "object"
      },
      "v1GetReviewMetricsResponse": {
        "description": "Response message containing review metrics grouped by namespace.",
        "properties": {
          "metricsForNamespace": {
            "description": "Output only. Review metrics grouped by namespace.",
            "items": {
              "$ref": "#/components/schemas/v1ReviewMetrics"
            },
            "readOnly": true,
            "type": "array"
          }
        },
        "title": "Get Review Metrics Response",
        "type": "object"
      },
      "v1GetReviewsRequest": {
        "description": "Request message for retrieving a set of reviews by their identifiers.",
        "properties": {
          "includeComments": {
            "description": "Optional. Whether or not to include comments on the reviews.",
            "type": "boolean"
          },
          "reviewIds": {
            "description": "Required. The set of review IDs to retrieve.",
            "items": {
              "$ref": "#/components/schemas/v1ReviewIdentifier"
            },
            "type": "array"
          }
        },
        "required": [
          "reviewIds"
        ],
        "title": "Get Reviews Request",
        "type": "object"
      },
      "v1GetReviewsResponse": {
        "description": "Response message containing the retrieved reviews.",
        "properties": {
          "reviews": {
            "description": "Output only. The retrieved reviews.",
            "items": {
              "$ref": "#/components/schemas/v1Review"
            },
            "readOnly": true,
            "type": "array"
          }
        },
        "title": "Get Reviews Response",
        "type": "object"
      },
      "v1ImportNPSRequest": {
        "description": "Request message for importing an NPS record, primarily for importing historical data from external systems.",
        "properties": {
          "accountGroupId": {
            "description": "Required. Business account ID (starts with \"AG-\").",
            "type": "string"
          },
          "attributes": {
            "description": "Optional. Additional attributes associated with the NPS score (key-value pairs).\nThis will be used to store meta data that provides additional context of the NPS feedback.",
            "type": "object"
          },
          "comment": {
            "description": "Optional. Customer comment provided along with the score.",
            "type": "string"
          },
          "communicationChannel": {
            "$ref": "#/components/schemas/v1CommunicationChannel"
          },
          "crmContactId": {
            "description": "Required. CRM Contact ID of the customer.",
            "type": "string"
          },
          "externalReviewRequestId": {
            "description": "Required. Unique external identifier for the review request. Used for deduplication.",
            "type": "string"
          },
          "npsExternalId": {
            "description": "Optional. External NPS identifier for tracking.",
            "type": "string"
          },
          "providerIds": {
            "description": "Optional. Provider IDs (IAM user IDs starting with \"U-\") associated with this NPS.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "requestSentTime": {
            "description": "Required. Time when the request was sent.",
            "format": "date-time",
            "type": "string"
          },
          "score": {
            "description": "Optional. NPS score (0-10). Set if customer has already left a score.",
            "format": "int64",
            "type": "string"
          },
          "scoreLeft": {
            "description": "Optional. Time when the score was left by the customer.",
            "format": "date-time",
            "type": "string"
          },
          "status": {
            "title": "Optional. Status of the review request.\nStatus mapping:\n  \"sending\" -\u003e Sending\n  \"sent\" -\u003e Sent\n  \"delivered\" -\u003e Delivered\n  \"opened\" -\u003e Opened\n  \"clicked\" -\u003e Clicked\n  \"failed\" -\u003e Failed\nUnmapped statuses (mapped to Invalid):\n  blocked, null, processing_attachments, undelivered, received, skipped\nDefault behavior when status is empty/not provided:\n  - If score or comment is present -\u003e Opened\n  - If no score and no comment -\u003e Invalid",
            "type": "string"
          },
          "templateType": {
            "$ref": "#/components/schemas/v1TemplateType"
          },
          "triggeringActivityIds": {
            "description": "Optional. Triggering activity IDs that initiated this review request.",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "accountGroupId",
          "crmContactId",
          "requestSentTime",
          "externalReviewRequestId"
        ],
        "title": "Import NPS Request",
        "type": "object"
      },
      "v1ImportNPSResponse": {
        "description": "Response message containing the ID of the created NPS record.",
        "properties": {
          "netPromoterScoreId": {
            "description": "Output only. The NPS record ID (starts with \"NPS-\").",
            "readOnly": true,
            "type": "string"
          }
        },
        "title": "Import NPS Response",
        "type": "object"
      },
      "v1LeaveNetPromoterScoreRequest": {
        "description": "Request message for submitting or updating a Net Promoter Score.",
        "properties": {
          "comment": {
            "description": "Optional. Comment seen in some UI, so we know what score it was associated with.",
            "type": "string"
          },
          "fieldMask": {
            "$ref": "#/components/schemas/vendastatypesFieldMask"
          },
          "netPromoterScoreId": {
            "description": "Required. NPS ID of the entity that will be updated.",
            "type": "string"
          },
          "score": {
            "description": "Required. The NPS score that was picked on scale of 1 to 10.",
            "format": "int64",
            "type": "string"
          }
        },
        "required": [
          "netPromoterScoreId",
          "score"
        ],
        "title": "Leave Net Promoter Score Request",
        "type": "object"
      },
      "v1ListNetPromoterScoresRequest": {
        "description": "Request message for listing Net Promoter Score records with optional filtering and pagination.",
        "properties": {
          "accountGroupId": {
            "description": "Required. Business account ID (starts with \"AG-\") to list NPS scores for.",
            "type": "string"
          },
          "cursor": {
            "description": "Optional. Pagination cursor from the previous response. Should be omitted when fetching the first page of results.\nFor subsequent pages, the cursor value from the previous response should be used.\nCursors are opaque tokens and must be used exactly as returned. Cursor values should not be generated or modified.",
            "type": "string"
          },
          "filters": {
            "$ref": "#/components/schemas/v1ListNetPromoterScoresRequestFilters"
          },
          "hideParent": {
            "default": "false",
            "description": "When set to true, parent NPS records (primary feedback marked is_parent=true and referenced by other NPS records via ParentNPSID) are excluded from the response. When set to false, the parent NPS records are included in the response.",
            "type": "boolean"
          },
          "includeTriggeringActivityDetails": {
            "default": "false",
            "description": "When set to true, triggering_activity_details will be populated with CRM activity information for each NPS record. When set to false, triggering_activity_details will be empty.",
            "type": "boolean"
          },
          "pageSize": {
            "description": "Optional. Number of items to return per page.\nThis value must be less than or equal to 500.",
            "format": "int64",
            "type": "string"
          }
        },
        "required": [
          "accountGroupId"
        ],
        "title": "List Net Promoter Scores Request",
        "type": "object"
      },
      "v1ListNetPromoterScoresRequestFilters": {
        "description": "Optional filtering criteria for narrowing NPS results.",
        "properties": {
          "channel": {
            "$ref": "#/components/schemas/v1CommunicationChannel"
          },
          "contactNames": {
            "items": {
              "type": "string"
            },
            "title": "Optional. Filter NPS records by contact names using fuzzy text search.\nA contact is the CRM customer who received the service and submitted the NPS feedback.\nThis performs a case-insensitive search against the contact.name field.\nMultiple names can be provided to filter for records matching any of the specified contact names.\nexample: [\"Jane Smith\", \"Michael Johnson\", \"Sarah Davis\"]",
            "type": "array"
          },
          "fromDate": {
            "description": "Optional. Include NPS scores submitted on or after this timestamp (RFC3339 UTC, inclusive).",
            "format": "date-time",
            "type": "string"
          },
          "hasProviderAssociation": {
            "description": "Optional. Filter NPS records based on whether they have associated providers.\nA provider is the employee or service provider who delivered the service to the contact.\nWhen true, returns only NPS records that have provider associations (populated provider_ids or providers fields).\nWhen false, returns only NPS records that do NOT have provider associations.\nWhen omitted/null, returns all NPS records regardless of provider association status.",
            "type": "boolean"
          },
          "providerIds": {
            "items": {
              "type": "string"
            },
            "title": "This field filters NPS records by provider (employee) internal IAM user ID (starts with \"U-\") and not by provider name.\nNote: This identifies the employee/provider who provided the service, not the customer (contact) who submitted the NPS.\nAccepts IDs only; names are not supported.\nexample: [\"U-e3bbb42b-c464-4326-9c09-aa8cfc45e0b3\", \"U-fa09664d-698d-4349-926f-147fb55e2a72\"]",
            "type": "array"
          },
          "providerNames": {
            "items": {
              "type": "string"
            },
            "title": "Optional. Filter NPS records by provider names using fuzzy text search.\nA provider is the employee or service provider who delivered the service to the customer.\nThis performs a case-insensitive search against the names in the providers field.\nMultiple names can be provided to filter for records matching any of the specified provider names.\nexample: [\"John Doe\", \"Sarah Johnson\", \"Mike Smith\"]",
            "type": "array"
          },
          "scoreCategory": {
            "description": "Optional. Filter by NPS score categories: DETRACTORS (0-6), PASSIVES (7-8), PROMOTERS (9-10).",
            "items": {
              "$ref": "#/components/schemas/v1ScoreCategory"
            },
            "type": "array"
          },
          "toDate": {
            "description": "Optional. Include NPS scores submitted on or before this timestamp (RFC3339 UTC, inclusive).",
            "format": "date-time",
            "type": "string"
          }
        },
        "type": "object"
      },
      "v1ListNetPromoterScoresResponse": {
        "description": "Response message containing NPS records matching the search criteria with pagination metadata.",
        "properties": {
          "cursor": {
            "description": "Output only. Cursor for the next page. This value should be used in the next request's cursor field.\nEmpty string means no more pages. The cursor is an opaque token. It must be used exactly as returned and should not be modified or generated.",
            "readOnly": true,
            "type": "string"
          },
          "hasMore": {
            "description": "Output only. Whether there are more results available.",
            "readOnly": true,
            "type": "boolean"
          },
          "netPromoterScore": {
            "description": "Output only. NPS score records matching the search criteria for the current page. Empty list if no matches.",
            "items": {
              "$ref": "#/components/schemas/v1NetPromoterScore"
            },
            "readOnly": true,
            "type": "array"
          },
          "totalResults": {
            "description": "Output only. Total count of NPS scores matching criteria across all pages.",
            "format": "int64",
            "readOnly": true,
            "type": "string"
          }
        },
        "title": "List Net Promoter Scores Response",
        "type": "object"
      },
      "v1Listing": {
        "description": "Represents a business listing on an external source, including NAP data, match quality, and timestamps.",
        "properties": {
          "created": {
            "description": "Output only. When the listing was created in the system.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "domain": {
            "description": "Output only. The domain of the listing URL.",
            "readOnly": true,
            "type": "string"
          },
          "externalId": {
            "description": "Output only. The external ID of the listing.",
            "readOnly": true,
            "type": "string"
          },
          "lastScraped": {
            "description": "Output only. When the listing was last scraped by the system.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "lastUserRefresh": {
            "description": "Output only. When the listing was refreshed by the user.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "listingIdentifier": {
            "$ref": "#/components/schemas/v1ListingIdentifier"
          },
          "matchQuality": {
            "$ref": "#/components/schemas/ListingMatchQuality"
          },
          "matches": {
            "description": "Output only. A list of which fields match the business's NAP data (companyName, city, state).",
            "items": {
              "type": "string"
            },
            "readOnly": true,
            "type": "array"
          },
          "missing": {
            "description": "Output only. Indicates if the listing is missing from the source's site.",
            "readOnly": true,
            "type": "boolean"
          },
          "missingOn": {
            "description": "Output only. When the listing was found missing by the system.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "modified": {
            "description": "Output only. When the listing was last modified by the system.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "nap": {
            "$ref": "#/components/schemas/v1NAP"
          },
          "score": {
            "description": "Output only. The score of the listing.",
            "format": "int64",
            "readOnly": true,
            "type": "string"
          },
          "sourceId": {
            "description": "Output only. The source that the listing belongs to.",
            "format": "int64",
            "readOnly": true,
            "type": "string"
          },
          "url": {
            "description": "Output only. The URL of the listing.",
            "readOnly": true,
            "type": "string"
          },
          "userSubmitted": {
            "description": "Output only. Indicates if the listing was submitted by the user.",
            "readOnly": true,
            "type": "boolean"
          },
          "verified": {
            "description": "Output only. Indicates if the listing was marked verified by the user.",
            "readOnly": true,
            "type": "boolean"
          }
        },
        "title": "Listing",
        "type": "object"
      },
      "v1ListingIdentifier": {
        "description": "Uniquely identifies a listing by its account group and listing ID.",
        "properties": {
          "accountGroupId": {
            "description": "Required. The account group ID that owns the listing.",
            "type": "string"
          },
          "listingId": {
            "description": "Required. The unique listing ID.",
            "type": "string"
          }
        },
        "required": [
          "accountGroupId",
          "listingId"
        ],
        "title": "Listing Identifier",
        "type": "object"
      },
      "v1LookupListingsRequest": {
        "description": "Request message for looking up listings for a business, with filtering options by source and match quality.",
        "properties": {
          "businessId": {
            "description": "Required. The business ID to look up listings for.",
            "type": "string"
          },
          "includeAnchorDataMatches": {
            "description": "Optional. Whether to include anchor data matches.",
            "type": "boolean"
          },
          "includeGoodListings": {
            "description": "Optional. Whether to include good listings.",
            "type": "boolean"
          },
          "includeInternetProviderListings": {
            "description": "Optional. Whether to include internet provider listings.",
            "type": "boolean"
          },
          "includeNotDoneListings": {
            "description": "Optional. Whether to include not-done listings.",
            "type": "boolean"
          },
          "includePoorListings": {
            "description": "Optional. Whether to include poor listings.",
            "type": "boolean"
          },
          "sourceIds": {
            "description": "Optional. The source IDs to filter listings by.",
            "items": {
              "format": "int64",
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "businessId"
        ],
        "title": "Lookup Listings Request",
        "type": "object"
      },
      "v1LookupListingsResponse": {
        "description": "Response message containing listings grouped by source.",
        "properties": {
          "listingsBySource": {
            "description": "Output only. The listings grouped by source.",
            "items": {
              "$ref": "#/components/schemas/v1LookupResponseForSource"
            },
            "readOnly": true,
            "type": "array"
          }
        },
        "title": "Lookup Listings Response",
        "type": "object"
      },
      "v1LookupResponseForSource": {
        "description": "Listings grouped by match quality for a single source.",
        "properties": {
          "goodListings": {
            "description": "Output only. Listings with good match quality.",
            "items": {
              "$ref": "#/components/schemas/v1Listing"
            },
            "readOnly": true,
            "type": "array"
          },
          "notDoneListings": {
            "description": "Output only. Listings that are not yet done.",
            "items": {
              "$ref": "#/components/sch

# --- truncated at 32 KB (101 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/vendasta/refs/heads/main/openapi/vendasta-reputation-grpc-openapi.json