{
  "components": {
    "schemas": {
      "HealthCareProfessionalInformationGender": {
        "default": "NotSpecified",
        "enum": [
          "NotSpecified",
          "Female",
          "Male",
          "Other"
        ],
        "type": "string"
      },
      "HealthCareProfessionalInformationIsProvider": {
        "default": "IsProviderNotSpecified",
        "enum": [
          "IsProviderNotSpecified",
          "IsProviderTrue",
          "IsProviderFalse"
        ],
        "type": "string"
      },
      "HoursOfOperationSpan": {
        "properties": {
          "closes": {
            "type": "string"
          },
          "dayOfWeek": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "description": {
            "type": "string"
          },
          "opens": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "RichDataPaymentMethods": {
        "default": "AMERICAN_EXPRESS",
        "enum": [
          "AMERICAN_EXPRESS",
          "ANDROID_PAY",
          "APPLE_PAY",
          "CASH",
          "CHECK",
          "DEBIT",
          "DINERS_CLUB",
          "DISCOVER",
          "MASTERCARD",
          "PAYPAL",
          "SAMSUNG_PAY",
          "STORE_CARD",
          "TRAVELERS_CHECK",
          "VISA",
          "CCS",
          "SODEXO",
          "GOPAY",
          "V_PAY",
          "FINANCING",
          "INVOICE",
          "PAYSEC",
          "BITCOIN",
          "NFC_MOBILE_PAYMENTS"
        ],
        "type": "string"
      },
      "listing_productsv1Location": {
        "properties": {
          "address": {
            "type": "string"
          },
          "address2": {
            "type": "string"
          },
          "callTrackingNumber": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "city": {
            "type": "string"
          },
          "companyName": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "location": {
            "$ref": "#/components/schemas/v1Geo"
          },
          "primaryOperatingLanguage": {
            "description": "The primary BCP 47 language the business operates in (e.g. \"en\", \"fr-ca\").\nEmpty when unset. Consumers fall back to \"en\".",
            "type": "string"
          },
          "serviceArea": {
            "$ref": "#/components/schemas/v1ServiceArea"
          },
          "serviceAreaBusiness": {
            "type": "boolean"
          },
          "state": {
            "type": "string"
          },
          "timezone": {
            "type": "string"
          },
          "website": {
            "type": "string"
          },
          "workNumber": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "zip": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "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"
      },
      "v1AccuracyStatus": {
        "default": "ACCURACY_STATUS_INVALID",
        "description": "AccuracyStatus represents the overall accuracy state of a listing on a directory.\nThis is determined by comparing the business profile data against what's actually live on the directory (scraped data).\n\n - ACCURACY_STATUS_INVALID: ACCURACY_STATUS_INVALID means the accuracy data could not be interpreted or there was an error during scraping.\nThis is a technical error, not a listing problem.\n - ACCURACY_STATUS_UNKNOWN: ACCURACY_STATUS_UNKNOWN means either no scraped data was found (listing might not exist yet), or we haven't scraped this source yet.\nCommon for new listings that haven't been indexed by the directory, or directories we don't actively scrape.\n - ACCURACY_STATUS_ACCURATE: ACCURACY_STATUS_ACCURATE means the scraped listing data matches the business profile perfectly.\nAll NAP fields match - the listing is correct and healthy.\n - ACCURACY_STATUS_INACCURATE: ACCURACY_STATUS_INACCURATE means the scraped listing has one or more discrepancies compared to the business profile.\nCheck anchor_data_matches to see exactly which fields don't match.\nUser action: Review and correct the inaccurate fields, then wait for next sync.\n - ACCURACY_STATUS_UNAVAILABLE: ACCURACY_STATUS_UNAVAILABLE means this directory doesn't support accuracy reporting (we don't scrape it).\nCommon for data aggregators (Neustar, Data Axle) that don't have public listing pages to scrape.",
        "enum": [
          "ACCURACY_STATUS_INVALID",
          "ACCURACY_STATUS_UNKNOWN",
          "ACCURACY_STATUS_ACCURATE",
          "ACCURACY_STATUS_INACCURATE",
          "ACCURACY_STATUS_UNAVAILABLE"
        ],
        "type": "string"
      },
      "v1AnchorData": {
        "description": "AnchorData contains the expected business NAP (Name, Address, Phone) data from the business profile.\nThis is the \"source of truth\" that we compare against what's live on the directory to determine accuracy.",
        "properties": {
          "address": {
            "title": "address is the expected street address",
            "type": "string"
          },
          "city": {
            "title": "city is the expected business city",
            "type": "string"
          },
          "companyName": {
            "title": "company_name is the expected business name",
            "type": "string"
          },
          "country": {
            "title": "country is the expected country code",
            "type": "string"
          },
          "phone": {
            "title": "phone is the expected primary phone number",
            "type": "string"
          },
          "state": {
            "title": "state is the expected state/province",
            "type": "string"
          },
          "website": {
            "title": "website is the expected business website URL",
            "type": "string"
          },
          "zip": {
            "title": "zip is the expected postal/zip code",
            "type": "string"
          }
        },
        "type": "object"
      },
      "v1AnchorDataMatches": {
        "properties": {
          "address": {
            "title": "address is true if the directory's street address matches the expected address\nAddress mismatches prevent customers from finding the business",
            "type": "boolean"
          },
          "city": {
            "title": "city is true if the directory's city matches the expected city",
            "type": "boolean"
          },
          "companyName": {
            "title": "company_name is true if the directory's business name matches the expected name\nName mismatches are common causes of listing inaccuracy",
            "type": "boolean"
          },
          "country": {
            "title": "country is true if the directory's country matches the expected country",
            "type": "boolean"
          },
          "phone": {
            "title": "phone is true if the directory's phone number matches the expected phone\nPhone mismatches are critical - often the most important field for users",
            "type": "boolean"
          },
          "state": {
            "title": "state is true if the directory's state/province matches the expected state",
            "type": "boolean"
          },
          "website": {
            "title": "website is true if the directory's website matches the expected website",
            "type": "boolean"
          },
          "zip": {
            "title": "zip is true if the directory's zip code matches the expected zip code",
            "type": "boolean"
          }
        },
        "title": "AnchorDataMatches contains field-by-field accuracy comparison results.\nEach boolean indicates if the expected value (from AnchorData) matches what's currently live on the directory.\nTrue = field is accurate, False = field is inaccurate or missing on the directory.\nThis is critical for answering \"which specific fields are wrong on this listing?\"",
        "type": "object"
      },
      "v1BingAttribute": {
        "properties": {
          "name": {
            "title": "The name of the Bing attribute in the form \"attributes/is_owned_by_women\"",
            "type": "string"
          },
          "value": {
            "title": "Contains the value of the attribute. This can be of 4 types:\n  bool\n  URL (represented as a string google.protobuf.Value)\n  enum (represented as a string google.protobuf.Value)\n  repeated_enum (represented as a struct google.protobuf.Value)\nhttps://bpprodpublicstorage.blob.core.windows.net/bingplacesapi/BingPlaces_API_Latest.pdf"
          }
        },
        "type": "object"
      },
      "v1BingAttributes": {
        "properties": {
          "bingAttribute": {
            "items": {
              "$ref": "#/components/schemas/v1BingAttribute"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "v1BusinessHours": {
        "properties": {
          "hoursTypeId": {
            "description": "The hours types are based on the type of business so we don't give an exhaustive list of hours\ntypes here. We get the hours types for the business's category using the Google endpoint\nhttps://developers.google.com/my-business/reference/businessinformation/rest/v1/categories/batchGet",
            "title": "hours type IDs are based on the Google hours types\nhttps://developers.google.com/my-business/reference/businessinformation/rest/v1/accounts.locations#morehours",
            "type": "string"
          },
          "regularHours": {
            "items": {
              "$ref": "#/components/schemas/v1RegularHoursPeriod"
            },
            "title": "RegularHours is a collection of times that this location is open for business. Each\nperiod represents a range of hours when the location is open during the week. You may specify\nmultiple entries for the same date if you are open for multiple periods (Example lunch and supper)",
            "type": "array"
          },
          "specialHours": {
            "description": "SpecialHours represents a set of time periods when a location's operational hours differ from\nits regular business hours. This may be a holiday or special event. These hours replace the\nall regular hours for the day. The openTime and startDate must predate the closeTime and endDate.",
            "items": {
              "$ref": "#/components/schemas/v1SpecialHoursPeriod"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "v1Citation": {
        "description": "Citation contains details for a citation.",
        "properties": {
          "breadcrumb": {
            "description": "Output only. The breadcrumb path of the citation page.",
            "readOnly": true,
            "type": "string"
          },
          "created": {
            "description": "Output only. When this citation was first discovered.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "description": {
            "description": "Output only. The page description or snippet of the citation.",
            "readOnly": true,
            "type": "string"
          },
          "domain": {
            "description": "Output only. The domain where the citation was found.",
            "readOnly": true,
            "type": "string"
          },
          "matchedFields": {
            "description": "Output only. The NAP fields that matched in this citation.",
            "items": {
              "type": "string"
            },
            "readOnly": true,
            "type": "array"
          },
          "searchTerm": {
            "description": "Output only. The search term that found this citation.",
            "readOnly": true,
            "type": "string"
          },
          "title": {
            "description": "Output only. The page title of the citation.",
            "readOnly": true,
            "type": "string"
          },
          "url": {
            "description": "Output only. The URL of the citation.",
            "readOnly": true,
            "type": "string"
          }
        },
        "type": "object"
      },
      "v1CitationsByDomain": {
        "properties": {
          "citations": {
            "items": {
              "$ref": "#/components/schemas/v1Citation"
            },
            "type": "array"
          },
          "domain": {
            "type": "string"
          }
        },
        "title": "CitationsByDomain contains all citations for a domain",
        "type": "object"
      },
      "v1ClosedStatus": {
        "default": "UNSPECIFIED",
        "enum": [
          "UNSPECIFIED",
          "OPEN",
          "LIMITED",
          "TEMPORARY",
          "PERMANENT"
        ],
        "title": "ClosedStatus describes if the business is permanently or temporarily closed, or in a limited state",
        "type": "string"
      },
      "v1ConditionalField": {
        "properties": {
          "id": {
            "type": "string"
          },
          "value": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "v1ConnectedDirectSyncAccount": {
        "description": "ConnectedDirectSyncAccount represents an OAuth-connected account for direct sync sources (Google, Facebook, Apple, Bing).\nThis is only populated for directories that require OAuth authentication to sync.",
        "properties": {
          "accountId": {
            "title": "account_id is the directory's internal identifier for this account (e.g., Google Account ID, Facebook Page ID)",
            "type": "string"
          },
          "accountType": {
            "title": "account_type identifies the directory/service type (e.g., \"google\", \"facebook\", \"apple\", \"bing\")",
            "type": "string"
          },
          "clientTags": {
            "items": {
              "type": "string"
            },
            "title": "client_tags are partner-specific tags associated with this account",
            "type": "array"
          },
          "connectionId": {
            "title": "connection_id uniquely identifies this connection in the Core Services system (also known as Social Service ID)",
            "type": "string"
          },
          "disabledFlag": {
            "title": "disabled_flag indicates this connection has been manually disabled and cannot be used",
            "type": "boolean"
          },
          "isAuthenticated": {
            "title": "is_authenticated indicates if the OAuth token is valid and the account is currently connected\nFalse means the user needs to re-authenticate (token expired or was revoked)",
            "type": "boolean"
          },
          "isSyncingEnabled": {
            "title": "is_syncing_enabled indicates if automatic syncing is turned on for this specific account\nA business might have multiple Google accounts connected but only sync to one",
            "type": "boolean"
          },
          "isVerified": {
            "title": "is_verified indicates the account has been verified/claimed by the provider\nExample: a verified Google Business Profile location vs. an unverified one",
            "type": "boolean"
          },
          "profileImageUrl": {
            "title": "profile_image_url is the avatar/logo URL for the connected account",
            "type": "string"
          },
          "profileUrl": {
            "title": "profile_url is the URL to the account's profile page on the directory (e.g., Google Business Profile dashboard)",
            "type": "string"
          },
          "tokenBroken": {
            "title": "token_broken indicates the OAuth token is invalid, expired, or revoked\nUser action required: Reconnect the account to get a fresh OAuth token",
            "type": "boolean"
          },
          "username": {
            "title": "username is the display name or email of the connected account (e.g., \"john@example.com\" for Google)",
            "type": "string"
          }
        },
        "type": "object"
      },
      "v1DayOfWeek": {
        "default": "DAY_OF_WEEK_UNSPECIFIED",
        "description": "Represents a day of the week.\n\n - DAY_OF_WEEK_UNSPECIFIED: The day of the week is unspecified.\n - MONDAY: Monday\n - TUESDAY: Tuesday\n - WEDNESDAY: Wednesday\n - THURSDAY: Thursday\n - FRIDAY: Friday\n - SATURDAY: Saturday\n - SUNDAY: Sunday",
        "enum": [
          "DAY_OF_WEEK_UNSPECIFIED",
          "MONDAY",
          "TUESDAY",
          "WEDNESDAY",
          "THURSDAY",
          "FRIDAY",
          "SATURDAY",
          "SUNDAY"
        ],
        "type": "string"
      },
      "v1DetailedSyndicationStatusResultValue": {
        "description": "DetailedSyndicationStatusResultValue contains field-level sync results for a specific data type.\nThis shows exactly which fields synced successfully and which failed within a data category.",
        "properties": {
          "dataType": {
            "title": "data_type is the category of data (matches the key in parent message)",
            "type": "string"
          },
          "errorMessage": {
            "title": "error_message contains the specific error for failed fields\nExample: \"Phone number format invalid for Bing Places. Must be (XXX) XXX-XXXX\"",
            "type": "string"
          },
          "failedFields": {
            "items": {
              "type": "string"
            },
            "title": "failed_fields lists individual fields that failed to sync\nExample: [\"phone\"] - this tells you exactly which field is causing the problem",
            "type": "array"
          },
          "lastSyncTime": {
            "format": "date-time",
            "title": "last_sync_time is when this data type was last synced successfully",
            "type": "string"
          },
          "status": {
            "title": "status is the high-level status for this data type (\"success\", \"failed\", \"partial\")",
            "type": "string"
          },
          "syncedFields": {
            "items": {
              "type": "string"
            },
            "title": "synced_fields lists individual fields that synced successfully\nExample: [\"company_name\", \"address\", \"city\", \"state\", \"zip\"]",
            "type": "array"
          }
        },
        "type": "object"
      },
      "v1DetailedSyndicationStatusResults": {
        "properties": {
          "key": {
            "title": "key identifies the data type category (e.g., \"location\" for NAP data, \"hours\" for business hours, \"photos\" for images)",
            "type": "string"
          },
          "value": {
            "$ref": "#/components/schemas/v1DetailedSyndicationStatusResultValue"
          }
        },
        "title": "DetailedSyndicationStatusResults provides granular sync status for different data types within a sync.\nKey-value pairs where key is the data type (e.g., \"location\", \"hours\", \"photos\")",
        "type": "object"
      },
      "v1DoctorDotComCategory": {
        "properties": {
          "fullName": {
            "type": "string"
          },
          "id": {
            "format": "int64",
            "type": "string"
          },
          "nuccTaxonomyCode": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "v1EcosystemSource": {
        "description": "EcosystemSource represents a secondary directory that receives data when syncing to a primary aggregator.\nExample: When syncing to Neustar or Data Axle, data flows to dozens of downstream directories.",
        "properties": {
          "icon": {
            "title": "icon is the URL to the directory's logo/icon",
            "type": "string"
          },
          "name": {
            "title": "name is the human-readable name of the downstream directory (e.g., \"TomTom\", \"Garmin\", \"MapQuest\")",
            "type": "string"
          },
          "sourceId": {
            "title": "source_id is the numeric ID of the downstream directory",
            "type": "string"
          }
        },
        "type": "object"
      },
      "v1ExternalIdentifiers": {
        "properties": {
          "actionLists": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "additionalSalesPersonIds": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "customerIdentifier": {
            "type": "string"
          },
          "jobId": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "marketId": {
            "type": "string"
          },
          "origin": {
            "type": "string"
          },
          "partnerId": {
            "type": "string"
          },
          "salesPersonId": {
            "type": "string"
          },
          "socialProfileId": {
            "type": "string"
          },
          "tags": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "taxIds": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "updateOrigin": {
            "type": "string"
          },
          "vCategoryIds": {
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "v1GBPClaimStatus": {
        "default": "GBP_CLAIM_STATUS_INVALID",
        "description": "GBPClaimStatus indicates whether a Google Business Profile listing has been claimed by the business owner.",
        "enum": [
          "GBP_CLAIM_STATUS_INVALID",
          "GBP_CLAIM_STATUS_UNKNOWN",
          "GBP_CLAIM_STATUS_CLAIMED",
          "GBP_CLAIM_STATUS_UNCLAIMED"
        ],
        "type": "string"
      },
      "v1Geo": {
        "description": "Represents a geo point location.",
        "properties": {
          "latitude": {
            "format": "double",
            "type": "number"
          },
          "longitude": {
            "format": "double",
            "type": "number"
          }
        },
        "type": "object"
      },
      "v1GetCitationDataRequest": {
        "description": "Request to retrieve citation data for a business, including citation counts, historical trends, and citations grouped by domain.",
        "properties": {
          "businessId": {
            "description": "Required. The business ID (account group ID) for which to retrieve citation data.",
            "type": "string"
          },
          "endDate": {
            "description": "Optional. The end date of the date range for citation data retrieval.",
            "format": "date-time",
            "type": "string"
          },
          "startDate": {
            "description": "Optional. The start date of the date range for citation data retrieval.",
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "businessId"
        ],
        "title": "GetCitationDataRequest",
        "type": "object"
      },
      "v1GetCitationDataResponse": {
        "description": "Contains citation data for a business including total count, historical trends, and citations grouped by domain.",
        "properties": {
          "citationCount": {
            "description": "Output only. The total number of citations found for the business.",
            "format": "int64",
            "readOnly": true,
            "type": "string"
          },
          "citationPercentGrowth": {
            "description": "Output only. The percentage growth in citations over the date range.",
            "format": "int64",
            "readOnly": true,
            "type": "string"
          },
          "citationsByDomain": {
            "description": "Output only. Citations grouped by domain.",
            "items": {
              "$ref": "#/components/schemas/v1CitationsByDomain"
            },
            "readOnly": true,
            "type": "array"
          },
          "historicalCitationsSeries": {
            "description": "Output only. Historical citation data points showing citation count over time.",
            "items": {
              "$ref": "#/components/schemas/v1HistoricalCitationsDataPoint"
            },
            "readOnly": true,
            "type": "array"
          },
          "initialCitationCount": {
            "description": "Output only. The initial citation count at the start of tracking.",
            "format": "int64",
            "readOnly": true,
            "type": "string"
          },
          "startDate": {
            "description": "Output only. The start date of the citation data range.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          }
        },
        "title": "GetCitationDataResponse",
        "type": "object"
      },
      "v1GetListingSourceByIdRequest": {
        "description": "Request to retrieve detailed configuration for a specific listing directory by its numeric ID.",
        "properties": {
          "fieldMask": {
            "$ref": "#/components/schemas/vendastatypesFieldMask"
          },
          "sourceId": {
            "description": "Required. The numeric ID of the directory (e.g., 1 = Google, 2 = Facebook, etc.).\nYou can get this ID from the source_id field in GetSyncDataResponse.",
            "format": "int64",
            "type": "string"
          }
        },
        "required": [
          "sourceId"
        ],
        "title": "GetListingSourceByIdRequest",
        "type": "object"
      },
      "v1GetListingSourceByIdResponse": {
        "description": "Contains comprehensive directory configuration and constraints for a single listing source.",
        "properties": {
          "source": {
            "$ref": "#/components/schemas/v1Source"
          }
        },
        "title": "GetListingSourceByIdResponse",
        "type": "object"
      },
      "v1GetListingSourcesRequest": {
        "description": "Request to fetch all listing sources, optionally filtered by provider.",
        "properties": {
          "fieldMask": {
            "$ref": "#/components/schemas/vendastatypesFieldMask"
          },
          "provider": {
            "$ref": "#/components/schemas/v1Provider"
          }
        },
        "title": "GetListingSourcesRequest",
        "type": "object"
      },
      "v1GetListingSourcesResponse": {
        "description": "Contains a map of all listing sources keyed by source ID.",
        "properties": {
          "fieldMask": {
            "$ref": "#/components/schemas/vendastatypesFieldMask"
          },
          "sources": {
            "additionalProperties": {
              "$ref": "#/components/schemas/v1Source"
            },
            "description": "Output only. Map of source_id to directory configuration.",
            "readOnly": true,
            "type": "object"
          }
        },
        "title": "GetListingSourcesResponse",
        "type": "object"
      },
      "v1GetLocalSearchSEODataRequest": {
        "description": "Request to fetch detailed vicinity/local search data for a specific keyword, showing search results from multiple geographic locations around the business.",
        "properties": {
          "businessId": {
            "description": "Required. The business ID (account group ID) for which to query local search data.",
            "type": "string"
          },
          "endDate": {
            "description": "Optional. The end date of the date range for which to retrieve local search data.",
            "format": "date-time",
            "type": "string"
          },
          "keyword": {
            "description": "Required. The specific keyword to fetch local search data for. Unlike GetSEODataSummary, this endpoint\nonly accepts a single keyword to provide detailed vicinity analysis.",
            "type": "string"
          },
          "startDate": {
            "description": "Optional. The start date of the date range for which to retrieve local search data.",
            "format": "date-time",
            "type": "string"
          }
        },
        "required": [
          "businessId",
          "keyword"
        ],
        "title": "GetLocalSearchSEODataRequest",
        "type": "object"
      },
      "v1GetLocalSearchSEODataResponse": {
        "description": "Contains detailed vicinity/local search data for a keyword, showing search results from multiple geographic locations around the business.",
        "properties": {
          "averageLocalRank": {
            "description": "Output only. The average ranking position across all 25 grid points (vicinities) in the Local Search Grid for\nthe current/most recent data. This metric represents the business's average visibility across the\n5x5 grid around the business location. Only grid points with available data are included in the\ncalculation. Grid points where the business was not found (rank 0, invalid, or \"-\") are treated as\nrank 21. Lower values indicate better average positioning across all geographic locations. Compare\nwith previous_average_local_rank to analyze visibility trends over time.\nNote: Although this field is a double, the agent response should display only the integer portion.",
            "format": "double",
            "readOnly": true,
            "type": "number"
          },
          "keyword": {
            "description": "Output only. The keyword for which this local search data was collected.",
            "readOnly": true,
            "type": "string"
          },
          "localSearchData": {
            "description": "Output only. A list of local search data entries, each representing search results from a different geographic\nlocation (vicinity). Each entry contains results from one of the 25 locations in the 5x5 grid around\nthe business, showing which businesses appear in search results at that specific location.",
            "items": {
              "$ref": "#/components/schemas/v1LocalSearchData"
            },
            "readOnly": true,
            "type": "array"
          },
          "previousAverageLocalRank": {
            "description": "Output only. The average ranking position across all 25 grid points (vicinities) from the previous/historical\nlocal search data. This represents the baseline average visibility for comparison with the current\naverage_local_rank. Only grid points with available data are included in the calculation. Grid points\nwhere the business was not found (rank 0, invalid, or \"-\") are treated as rank 21. Used for trend\nanalysis to determine if local search visibility has improved, declined, or remained stable.\nNote: Although this field is a double, the agent response should display only the integer portion.",
            "format": "double",
            "readOnly": true,
            "type": "number"
          },
          "previousLocalSearchData": {
            "description": "Output only. Historical local search data entries from the oldest data point within the specified date range.\nThis represents baseline data for comparison to show performance changes over time.",
            "items": {
              "$ref": "#/components/schemas/v1LocalSearchData"
            },
            "readOnly": true,
            "type": "array"
          }
        },
        "title": "GetLocalSearchSEODataResponse",
        "type": "object"
      },
      "v1GetSyncDataRequest": {
        "description": "Request to retrieve comprehensive sync status and listing accuracy data for a business across all directory sources.",
        "properties": {
          "businessId": {
            "description": "Required. The business ID (also known as account_group_id) uniquely identifying the business location.",
            "type": "string"
          },
          "includeHidden": {
            "description": "Optional. Returns directories that are normally hidden from the UI (e.g., disabled by partner, not applicable to business category).\nSet to true for comprehensive troubleshooting or to see all possible directories.",
            "type": "boolean"
          },
          "refresh": {
            "description": "Optional. Forces a refresh of OAuth tokens for connected accounts (Google, Facebook, etc.).\nSet to true if you suspect authentication issues. This will add latency to the request.",
            "type": "boolean"
          },
          "sourceIds": {
            "description": "Optional. Filters results to only include specific directory IDs.\nIf empty, returns all directories. Use this to check status of specific directories efficiently.",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "businessId"
        ],
        "title": "GetSyncDataRequest",
        "type": "object"
      },
      "v1GetSyncDataResponse": {
        "description": "Contains sync status and accuracy information for all relevant listing directories for a business.",
        "properties": {
          "sources": {
            "description": "Output only. An array of directory-specific sync and accuracy data.\nEach entry represents one directory where the business has or could have a listing.",
            "items": {
              "$ref": "#/components/schemas/v1SyncData"
            },
            "readOnly": true,
            "type": "array"
          }
        },
        "title": "GetSyncDataResponse",
        "type": "object"
      },
      "v1GoogleAttribute": {
        "properties": {
          "name": {
            "title": "The name of the Google attribute in the form \"attributes/is_owned_by_women\"",
            "type": "string"
          },
          "value": {
            "title": "Contains the value of the attribute. This can be of 4 types:\n  bool\n  URL (represented as a string google.protobuf.Value)\n  enum (represented as a string google.protobuf.Value)\n  repeated_enum (represented as a struct google.protobuf.Value)\nhttps://developers.google.com/my-business/reference/businessinformation/rest/v1/AttributeValueType"
          }
        },
        "title": "Represents a single Google attribute\nreference docs:\nhttps://developers.google.com/my-business/reference/businessinformation/rest/v1/attributes/list#attributemetadata\nhttps://developers.google.com/my-business/reference/businessinformation/rest/v1/Attributes",
        "type": "object"
      },
      "v1GoogleAttributes": {
        "properties": {
          "googleAttribute": {
            "items": {
              "$ref": "#/components/schemas/v1GoogleAttribute"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "v1GoogleDate": {
        "description": "* A full date, with non-zero year, month, and day values\n* A month and day value, with a zero year, such as an anniversary\n* A year on its own, with zero month and day values\n* A year and month value, with a zero day, such as a credit card expiration\ndate\n\nRelated types are [google.type.TimeOfDay][google.type.TimeOfDay] and\n`google.protobuf.Timestamp`.",
        "properties": {
          "day": {
            "description": "Day of a month. Must be from 1 to 31 and valid for the year and month, or 0\nto specify a year by itself or a year and month where the day isn't\nsignificant.",
            "format": "int32",
            "type": "integer"
          },
          "month": {
            "description": "Month of a year. Must be from 1 to 12, or 0 to specify a year without a\nmonth and day.",
            "format": "int32",
            "type": "integer"
          },
          "year": {
            "description": "Year of the date. Must be from 1 to 9999, or 0 to specify a date without\na year.",
            "format": "int32",
            "type": "integer"
          }
        },
        "title": "Represents a whole or partial calendar date, such as a birthday. The time of\nday and time zone are either specified elsewhere or are insignificant. The\ndate is relative to the Gregorian Calendar. This can represent one of the\nfollowing:",
        "type": "object"
      },
      "v1GooglePlace": {
        "properties": {
          "city": {
            "title": "The city or locality the Google Place is located in",
            "type": "string"
          },
          "placeId": {
            "title": "The ID of the place",
            "type": "string"
          },
          "placeName": {
            "description": "The localized name of the place. For example, Scottsdale, AZ.",
            "type": "string"
          }
        },
        "title": "Based on https://developers.google.com/my-business/reference/businessinformation/rest/v1/accounts.locations#Location.PlaceInfo",
        "type": "object"
      },
      "v1GoogleService": {
        "properties": {
          "displayName": {
            "description": "The human-readable display name (e.g., \"Beard trim\"). Stored alongside the ID\nso downstream consumers can use it without a metadata API call.",
            "type": "string"
          },
          "enabled": {
            "description": "Whether the user has enabled (true) or disabled (false) this service.",
            "type": "boolean"
          },
          "serviceTypeId": {
            "description": "The Google-provided service type ID (e.g., \"job_type_id:beard_trimming\").",
            "type": "string"
          }
        },
        "title": "Represents a single Google structured service that a user has explicitly toggled.\nReference: https://developers.google.com/my-business/reference/businessinformation/rest/v1/accounts.locations#structuredserviceitem",
        "type": "object"
      },
      "v1GoogleServices": {
        "description": "Wrapper for use in UpdateOperation oneof.",
        "properties": {
          "googleService": {
            "items": {
              "$ref": "#/components/schemas/v1GoogleService"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "v1HealthCareProfessionalInformation": {
        "properties": {
          "dateOfBirth": {
            "format": "date-time",
            "type": "string"
          },
          "doctorDotComCategories": {
            "items": {
              "$ref": "#/components/schemas/v1DoctorDotComCategory"
            },
            "type": "array"
          },
          "email": {
            "type": "string"
          },
          "fellowship": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "firstName": {
            "type": "string"
          },
          "gender": {
            "$ref": "#/components/schemas/HealthCareProfessionalInformationGender"
          },
          "hospitalAffiliations": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "initials": {
            "type": "string"
          },
          "insurancesAccepted": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "isProvider": {
            "$ref": "#/components/schemas/HealthCareProfessionalInformationIsProvider"
          },
          "isTakingPatients": {
            "type": "boolean"
          },
          "lastName": {
            "type": "string"
          },
          "medicalLicenseNumber": {
            "type": "string"
          },
          "nationalProviderIdentifier": {
            "type": "string"
          },
          "office": {
            "type": "string"
          },
          "professionalCredential": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "residency": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "school": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "specialty": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "standardizedTitle": {
            "type": "string"
          },
          "stateLicense": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "v1HistoricalCitationsDataPoint": {
        "properties": {
          "date": {
            "description": "Output only. Date of the data point.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "value": {
            "description": "Output only. Total citations found up to this date.",
            "format": "int64",
            "readOnly": true,
            "type": "string"
          }
        },
        "type": "object"
      },
      "v1HoursOfOperation": {
        "properties": {
          "hoursOfOperation": {
            "items": {
              "$ref": "#/components/schemas/HoursOfOperationSpan"
            },
            "type": "array"
          }
        },
        "title": "Deprecated",
        "type": "object"
      },
      "v1IsAvailable": {
        "default": "UNSET",
        "enum": [
          "UNSET",
          "YES",
          "NO"
        ],
        "type": "string"
      },
      "v1LegacyProductDetails": {
        "properties": {
          "adminNotes": {
            "type": "string"
          },
          "commonName": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "competitor": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "shareOfVoiceService": {
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "v1LifecycleStage": {
        "default": "LIFECYCLE_STAGE_UNSET",
        "description": "Where an account is at in the lifecycle stage\nThe sales domain has the same concept of a lifecycle stage. Updating this enum\nmost likely means you need to update the one in sales as well.",
        "enum": [
          "LIFECYCLE_STAGE_UNSET",
          "LIFECYCLE_STAGE_LEAD",
          "LIFECYCLE_STAGE_PROSPECT",
          "LIFECYCLE_STAGE_CUSTOMER"
        ],
        "type": "string"
      },
      "v1LocalSearchData": {
        "description": "LocalSearchData represents search results from a specific geographic location (vicinity) for a keyword.\nThis message contains all businesses that appeared in local search results when searching from that location.",
        "properties": {
          "keyword": {
            "description": "The keyword phrase that was searched for at this location.",
            "type": "string"
          },
          "results": {
            "description": "A list of businesses that appeared in the local search results at this location, ordered by their\nranking position. This shows which businesses are visible when searching from this specific geographic point.",
            "items": {
              "$ref": "#/components/schemas/v1LocalSearchResult"
            },
            "type": "array"
          },
          "searchLocation": {
            "$ref": "#/components/schemas/v1Geo"
          },
          "vicinity": {
            "$ref": "#/components/schemas/v1Vicinity"
          }
        },
        "type": "object"
      },
      "v1LocalSearchResult": {
        "description": "LocalSearchResult represents a single business that appeared in local search results.\nThis message contains details about a business listing found in the search results for a specific keyword and location.",
        "properties": {
          "address": {
            "description": "The street address of the business.",
            "type": "string"
          },
          "businessName": {
            "description": "The name of the business as it appears in the search results.",
            "type": "string"
          },
          "claimStatus": {
            "$ref": "#/components/schemas/v1GBPClaimStatus"
          },
          "isMainBusiness": {
            "description": "A flag indicating whether this result is the main business being tracked (true) or a competitor (false).\nWhen true, this represents the business for which SEO data is being collected.",
            "type": "boolean"
          },
          "phoneNumber": {
            "description": "The phone number associated with this business listing.",
            "type": "string"
          },
          "rank": {
            "description": "The ranking position of this business in the search results (e.g., \"1\", \"2\", \"3\").\nLower numbers indicate higher visibility in search results.",
            "type": "string"
          },
          "reviews": {
            "$ref": "#/components/schemas/v1LocalSearchReviews"
          },
          "url": {
            "description": "The URL of the business's Google Business Profile or listing page.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "v1LocalSearchReviews": {
        "description": "LocalSearchReviews contains review information for a business found in local search results.",
        "properties": {
          "count": {
            "description": "The total number of reviews for this business, stored as a string to accommodate large numbers.",
            "type": "string"
          },
          "rating": {
            "description": "The average star rating for this business (typically on a scale of 1.0 to 5.0).",
            "format": "double",
            "type": "number"
          }
        },
        "type": "object"
      },
      "v1LocationOverride": {
        "properties": {
          "ignoredAnchorDataMatches": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "submitListingValidationRegex": {
            "type": "string"
          }
        },
        "title": "Location specific source overrides",
        "type": "object"
      },
      "v1MarketingClassification": {
        "default": "MARKETING_CLASSIFICATION_UNUSED",
        "enum": [
          "MARKETING_CLASSIFICATION_UNUSED",
          "MARKETING_CLASSIFICATION_SMB",
          "MARKETING_CLASSIFICATION_SPAM",
          "MARKETING_CLASSIFICATION_DUPLICATE",
          "MARKETING_CLASSIFICATION_BLACKLISTED",
          "MARKETING_CLASSIFICATION_OUT_OF_MARKET"
        ],
        "type": "string"
      },
      "v1MarketingInfo": {
        "properties": {
          "conversionPoint": {
            "type": "string"
          },
          "lifecycleStage": {
            "$ref": "#/components/schemas/v1LifecycleStage"
          },
          "marketingClassification": {
            "$ref": "#/components/schemas/v1MarketingClassification"
          }
        },
        "title": "MarketingInfo store marketing properties for an account group",
        "type": "object"
      },
      "v1Metadata": {
        "description": "Metadata contains additional key-value information about a sync.\nContents vary by directory - may include submission IDs, provider-specific status codes, etc.",
        "properties": {
          "key": {
            "title": "key is the metadata field name",
            "type": "string"
          },
          "value": {
            "title": "value is the metadata field value",
            "type": "string"
          }
        },
        "type": "object"
      },
      "v1PartnerOverride": {
        "properties": {
          "adminNotes": {
            "type": "string"
          },
          "claimListingHtml": {
            "type": "string"
          },
          "createListingHtml": {
            "type": "string"
          },
          "descriptionHtml": {
            "type": "string"
          },
          "editListingHtml": {
            "type": "string"
          },
          "editListingUrl": {
            "type": "string"
          },
          "iconClass16px": {
            "type": "string"
          },
          "iconClass32px": {
            "type": "string"
          },
          "iconClass50px": {
            "type": "string"
          },
          "iconUrl16px": {
            "type": "string"
          },
          "iconUrl32px": {
            "type": "string"
          },
          "iconUrl50px": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        },
        "title": "Partner specific source overrides",
        "type": "object"
      },
      "v1Provider": {
        "default": "PROVIDER_UNSPECIFIED",
        "description": "Provider indicates how listing data is synced to a directory.\nThis is critical for understanding the difference between managed (LSP) and manual (RM) listings.\n\n - PROVIDER_UNSPECIFIED: PROVIDER_UNSPECIFIED means manual submission via Reputation Management (RM).\nThese listings must be manually created and updated by the user.\nThey do NOT automatically sync when the business profile changes.\n - PROVIDER_UBERALL: PROVIDER_UBERALL means synced automatically via Uberall (LSP provider for European/international directories).\nRequires active Listing Sync Pro subscription with Uberall.\n - PROVIDER_YEXT: PROVIDER_YEXT means synced automatically via Yext (LSP provider for North American directories).\nRequires active Listing Sync Pro subscription with Yext.\n - PROVIDER_DIRECT: PROVIDER_DIRECT means synced directly via OAuth (Google, Facebook, Apple, Bing).\nNo LSP subscription required - user just needs to connect their account.",
        "enum": [
          "PROVIDER_UNSPECIFIED",
          "PROVIDER_UBERALL",
          "PROVIDER_YEXT",
          "PROVIDER_DIRECT"
        ],
        "type": "string"
      },
      "v1RegularHoursPeriod": {
        "properties": {
          "closeDay": {
            "$ref": "#/components/schemas/v1DayOfWeek"
          },
          "closeTime": {
            "$ref": "#/components/schemas/v1TimeOfDay"
          },
          "openDay": {
            "$ref": "#/components/schemas/v1DayOfWeek"
          },
          "openTime": {
            "$ref": "#/components/schemas/v1TimeOfDay"
          }
        },
        "type": "object"
      },
      "v1RichData": {
        "properties": {
          "bookingUrl": {
            "type": "string"
          },
          "brandsCarried": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "cellNumber": {
            "type": "string"
          },
          "conditionalFields": {
            "items": {
              "$ref": "#/components/schemas/v1ConditionalField"
            },
            "type": "array"
          },
          "description": {
            "type": "string"
          },
          "email": {
            "type": "string"
          },
          "faxNumber": {
            "type": "string"
          },
          "healthCareProfessionalInformation": {
            "$ref": "#/components/schemas/v1HealthCareProfessionalInformation"
          },
          "inferredAttributes": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "landmark": {
            "type": "string"
          },
          "paymentMethods": {
            "items": {
              "$ref": "#/components/schemas/RichDataPaymentMethods"
            },
            "type": "array"
          },
          "seoKeywords": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "serviceAvailability": {
            "$ref": "#/components/schemas/v1ServiceAvailability"
          },
          "servicesOffered": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "shortDescription": {
            "type": "string"
          },
          "syncingSeoKeywords": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "tollFreeNumber": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "v1SaveSEOSettingsRequest": {
        "description": "Request to save SEO settings for a business, including local search radius and favorite keywords.",
        "properties": {
          "businessId": {
            "description": "Required. The business ID (account group ID) for which to save SEO settings.",
            "type": "string"
          },
          "favoriteKeywords": {
            "description": "Optional. The list of favorite keywords for this business.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "fieldMask": {
            "$ref": "#/components/schemas/vendastatypesFieldMask"
          },
          "isFullSearchEnabled": {
            "description": "Optional. Whether full search is enabled for this business.",
            "type": "boolean"
          },
          "localSearchRadius": {
            "description": "Optional. The local search radius to use for keyword tracking.",
            "format": "double",
            "type": "number"
          }
        },
        "required": [
          "businessId"
        ],
        "title": "SaveSEOSettingsRequest",
        "type": "object"
      },
      "v1ServiceArea": {
        "properties": {
          "businessType": {
            "$ref": "#/components/schemas/v1ServiceAreaBusinessType"
          },
          "places": {
            "items": {
              "$ref": "#/components/schemas/v1GooglePlace"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "v1ServiceAreaBusinessType": {
        "default": "SERVICE_AREA_BUSINESS_TYPE_UNSPECIFIED",
        "description": "- SERVICE_AREA_BUSINESS_TYPE_UNSPECIFIED: Not specified.\n - SERVICE_AREA_BUSINESS_TYPE_CUSTOMER_LOCATION_ONLY: Offers service only in the surrounding area (not at the business address).\n - SERVICE_AREA_BUSINESS_TYPE_CUSTOMER_AND_BUSINESS_LOCATION: Offers service at the business address and the surrounding area.",
        "enum": [
          "SERVICE_AREA_BUSINESS_TYPE_UNSPECIFIED",
          "SERVICE_AREA_BUSINESS_TYPE_CUSTOMER_LOCATION_ONLY",
          "SERVICE_AREA_BUSINESS_TYPE_CUSTOMER_AND_BUSINESS_LOCATION"
        ],
        "title": "Based on https://developers.google.com/my-business/reference/businessinformation/rest/v1/accounts.locations#Location.BusinessType",
        "type": "string"
      },
      "v1ServiceAvailability": {
        "properties": {
          "appointmentsOnly": {
            "$ref": "#/components/schemas/v1IsAvailable"
          },
          "closedStatus": {
            "$ref": "#/components/schemas/v1ClosedStatus"
          },
          "closedStatusDate": {
            "format": "date-time",
            "type": "string"
          },
          "curbsidePickup": {
            "$ref": "#/components/schemas/v1IsAvailable"
          },
          "delivery": {
            "$ref": "#/components/schemas/v1IsAvailable"
          },
          "ecommerceOnly": {
            "$ref": "#/components/schemas/v1IsAvailable"
          },
          "inStorePickup": {
            "$ref": "#/components/schemas/v1IsAvailable"
          },
          "noContactDelivery": {
            "$ref": "#/components/schemas/v1IsAvailable"
          },
          "reopeningDate": {
            "format": "date-time",
            "type": "string"
          },
          "servesDineIn": {
            "$ref": "#/components/schemas/v1IsAvailable"
          }
        },
        "type": "object"
      },
      "v1SocialURLs": {
        "properties": {
          "facebookUrl": {
            "type": "string"
          },
          "foursquareUrl": {
            "type": "string"
          },
          "googleplusUrl": {
            "type": "string"
          },
          "instagramUrl": {
            "type": "string"
          },
          "linkedinUrl": {
            "type": "string"
          },
          "pinterestUrl": {
            "type": "string"
          },
          "rssUrl": {
            "type": "string"
          },
          "twitterUrl": {
            "type": "string"
          },
          "youtubeUrl": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "v1Source": {
        "description": "Source contains comprehensive configuration and constraints for a listing directory.\nThis is the definitive reference for understanding what's required to sync to a directory,\nwhether a business is eligible, and what features the directory supports.",
        "properties": {
          "adminNotes": {
            "title": "admin_notes contains internal notes about this directory (for Vendasta admins)",
            "type": "string"
          },
          "availableForServiceAreaBusiness": {
            "title": "available_for_service_area_business indicates this directory supports service area businesses (no physical location)\nFalse means only businesses with a physical storefront can list here",
            "type": "boolean"
          },
          "claimListingHtml": {
            "title": "claim_listing_html contains HTML instructions for claiming an existing listing",
            "type": "string"
          },
          "createListingHtml": {
            "title": "create_listing_html contains HTML instructions for manually creating a listing on this directory",
            "type": "string"
          },
          "createListingUrl": {
            "title": "create_listing_url is the URL where users can manually create a listing",
            "type": "string"
          },
          "created": {
            "description": "Output only. When this directory was added to the system.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "deleted": {
            "description": "Output only. Indicates this directory has been removed/deprecated.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "descriptionHtml": {
            "title": "description_html is a human-readable description of this directory for display",
            "type": "string"
          },
          "domains": {
            "items": {
              "type": "string"
            },
            "title": "domains lists the web domains associated with this directory (for matching/scraping)",
            "type": "array"
          },
          "editListingHtml": {
            "title": "edit_listing_html contains HTML instructions for manually editing a listing",
            "type": "string"
          },
          "editListingUrl": {
            "title": "edit_listing_url is the URL where users can manually edit their listing",
            "type": "string"
          },
          "enabledFlag": {
            "description": "enabled_flag controls whether this directory is visible in user-facing applications (RepMan, Snapshot, Business App).\nWhen false, the directory is hidden from the UI but existing listings may still sync.\nDo not interpret false as \"deprecated\" - it means the source is not available for new manual submissions\nbut may still be actively synced via LSP providers.",
            "type": "boolean"
          },
          "hasListingReporting": {
            "title": "has_listing_reporting indicates we can scrape/check this directory for accuracy data\nIf false, accuracy will always be ACCURACY_STATUS_UNAVAILABLE",
            "type": "boolean"
          },
          "hasListingsFlag": {
            "title": "has_listings_flag indicates this directory displays business listings (vs. just aggregating data)",
            "type": "boolean"
          },
          "hasNoRatingsReviewsFlag": {
            "title": "has_no_ratings_reviews_flag indicates this directory does not support ratings/reviews",
            "type": "boolean"
          },
          "hasReviewsFlag": {
            "title": "has_reviews_flag indicates this directory supports customer reviews",
            "type": "boolean"
          },
          "iconClass16px": {
            "title": "icon_class_16px is the CSS class for 16px icon",
            "type": "string"
          },
          "iconClass32px": {
            "title": "icon_class_32px is the CSS class for 32px icon",
            "type": "string"
          },
          "iconClass50px": {
            "title": "icon_class_50px is the CSS class for 50px icon",
            "type": "string"
          },
          "iconUrl16px": {
            "title": "icon_url_16px is the URL for 16px icon",
            "type": "string"
          },
          "iconUrl32px": {
            "title": "icon_url_32px is the URL for 32px icon",
            "type": "string"
          },
          "iconUrl50px": {
            "title": "icon_url_50px is the URL for 50px icon",
            "type": "string"
          },
          "ignoredAnchorDataMatches": {
            "items": {
              "type": "string"
            },
            "title": "ignored_anchor_data_matches lists NAP fields to ignore when calculating accuracy\nExample: [\"phone\"] means don't flag phone number mismatches as inaccurate",
            "type": "array"
          },
          "isDirectlySubmittedSource": {
            "title": "is_directly_submitted_source indicates this is a direct OAuth source (Google, Facebook, Apple, Bing)\nTrue means businesses can connect their account directly without LSP",
            "type": "boolean"
          },
          "isLdSource": {
            "title": "is_ld_source indicates this directory is part of Listing Distribution (Data Axle, Neustar, Foursquare ecosystem)",
            "type": "boolean"
          },
          "isLocationWhitelistedByDefaultFlag": {
            "title": "is_location_whitelisted_by_default_flag affects location-based eligibility",
            "type": "boolean"
          },
          "isPartnerWhitelistedByDefaultFlag": {
            "title": "is_partner_whitelisted_by_default_flag affects partner-based eligibility",
            "type": "boolean"
          },
          "isTaxonomyWhitelistedByDefaultFlag": {
            "title": "is_taxonomy_whitelisted_by_default_flag affects category-based eligibility",
            "type": "boolean"
          },
          "locationBlacklist": {
            "items": {
              "type": "string"
            },
            "title": "location_blacklist lists country codes where this directory is not available",
            "type": "array"
          },
          "locationSpecificOverrides": {
            "additionalProperties": {
              "$ref": "#/components/schemas/v1LocationOverride"
            },
            "title": "location_specific_overrides provides country-specific configuration overrides",
            "type": "object"
          },
          "locationWhitelist": {
            "items": {
              "type": "string"
            },
            "title": "location_whitelist lists country codes where this directory is available (if specified, only these countries)",
            "type": "array"
          },
          "lspIcon": {
            "title": "lsp_icon is the icon URL used in LSP-specific UI",
            "type": "string"
          },
          "name": {
            "title": "name is the human-readable directory name (e.g., \"Google\", \"Yelp\", \"Facebook\")",
            "type": "string"
          },
          "partnerBlacklist": {
            "items": {
              "type": "string"
            },
            "title": "partner_blacklist lists partner IDs that cannot use this directory",
            "type": "array"
          },
          "partnerSpecificOverrides": {
            "additionalProperties": {
              "$ref": "#/components/schemas/v1PartnerOverride"
            },
            "title": "partner_specific_overrides provides partner-specific configuration (custom branding, names, etc.)",
            "type": "object"
          },
          "partnerWhitelist": {
            "items": {
              "type": "string"
            },
            "title": "partner_whitelist lists partner IDs that can use this directory (if specified, only these partners)",
            "type": "array"
          },
          "popularity": {
            "format": "int64",
            "title": "popularity is a ranking score (higher = more important directory)",
            "type": "string"
          },
          "sourceId": {
            "description": "Output only. The unique numeric identifier for this directory.",
            "format": "int64",
            "readOnly": true,
            "type": "string"
          },
          "sourceTypeId": {
            "title": "source_type_id is the category identifier (e.g., \"search_engine\", \"social_network\")",
            "type": "string"
          },
          "sourceTypeName": {
            "title": "source_type_name is the human-readable category name",
            "type": "string"
          },
          "submitListingHelpText": {
            "title": "submit_listing_help_text provides guidance for manual listing submission",
            "type": "string"
          },
          "submitListingValidationRegex": {
            "title": "submit_listing_validation_regex validates listing URLs for manual submission",
            "type": "string"
          },
          "supportsSubmittedListing": {
            "title": "supports_submitted_listing indicates manual submission via RM is supported",
            "type": "boolean"
          },
          "syncRequirement": {
            "$ref": "#/components/schemas/v1SyncRequirement"
          },
          "taxonomyBlacklist": {
            "items": {
              "type": "string"
            },
            "title": "taxonomy_blacklist lists business category IDs that are not eligible for this directory\nUse this to explain \"Your business type is not supported on [directory]\"",
            "type": "array"
          },
          "taxonomyWhitelist": {
            "items": {
              "type": "string"
            },
            "title": "taxonomy_whitelist lists business category IDs that are eligible (if specified, only these categories)",
            "type": "array"
          },
          "uberallId": {
            "title": "uberall_id is the directory's identifier in the Uberall system (if synced via Uberall)",
            "type": "string"
          },
          "updated": {
            "description": "Output only. When this directory configuration was last modified.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "yextId": {
            "title": "yext_id is the directory's identifier in the Yext system (if synced via Yext)",
            "type": "string"
          }
        },
        "type": "object"
      },
      "v1SourceAccuracy": {
        "properties": {
          "anchorData": {
            "$ref": "#/components/schemas/v1AnchorData"
          },
          "anchorDataMatches": {
            "$ref": "#/components/schemas/v1AnchorDataMatches"
          },
          "lastScraped": {
            "format": "date-time",
            "title": "last_scraped is when we last checked the directory's live listing\nIf this is old, the accuracy data might be stale (we scrape periodically, not real-time)",
            "type": "string"
          },
          "status": {
            "$ref": "#/components/schemas/v1AccuracyStatus"
          }
        },
        "title": "SourceAccuracy contains comprehensive accuracy information for a listing on a directory.\nThis shows both the expected data and field-by-field comparison with what's actually live.\nThis is the key data structure for answering \"why is my listing inaccurate?\"",
        "type": "object"
      },
      "v1SpecialHoursPeriod": {
        "properties": {
          "endDate": {
            "$ref": "#/components/schemas/v1GoogleDate"
          },
          "endTime": {
            "$ref": "#/components/schemas/v1TimeOfDay"
          },
          "startDate": {
            "$ref": "#/components/schemas/v1GoogleDate"
          },
          "startTime": {
            "$ref": "#/components/schemas/v1TimeOfDay"
          },
          "status": {
            "$ref": "#/components/schemas/v1SpecialHoursStatus"
          }
        },
        "type": "object"
      },
      "v1SpecialHoursStatus": {
        "default": "SPECIAL_HOURS_STATUS_INVALID",
        "description": "- SPECIAL_HOURS_STATUS_INVALID: Indicates that the field was not sent on the API request. This is not valid to be used.\n - SPECIAL_HOURS_STATUS_OPEN: Indicates the business is open during the period indicated by\n`start_date`, `start_time`, `end_date`, and `end_time`\n - SPECIAL_HOURS_STATUS_CLOSED: Indicates that the business is closed for the entire period from `start_date` to `end_date`.\n`start_time` and `end_time` will be ignored.\n - SPECIAL_HOURS_STATUS_UNCONFIRMED_HOLIDAY: NOT IMPLEMENTED The UI for this status is not included in the first slice.\nIndicates that there is a holiday during the specified period and the business has not confirmed their hours.\nThese periods should not be sent to listing sites",
        "enum": [
          "SPECIAL_HOURS_STATUS_INVALID",
          "SPECIAL_HOURS_STATUS_OPEN",
          "SPECIAL_HOURS_STATUS_CLOSED",
          "SPECIAL_HOURS_STATUS_UNCONFIRMED_HOLIDAY"
        ],
        "title": "Describes the different modes that apply to special hour periods",
        "type": "string"
      },
      "v1SyncData": {
        "description": "SyncData contains comprehensive sync status and accuracy information for a single directory source.\nThis is the primary data structure for understanding listing presence, accuracy, and sync health.",
        "properties": {
          "account": {
            "$ref": "#/components/schemas/v1ConnectedDirectSyncAccount"
          },
          "accuracy": {
            "$ref": "#/components/schemas/v1SourceAccuracy"
          },
          "additionalAccounts": {
            "items": {
              "$ref": "#/components/schemas/v1ConnectedDirectSyncAccount"
            },
            "title": "additional_accounts lists other OAuth accounts connected for this directory that could be used for syncing\nUseful when a business has multiple Google accounts and needs to choose which one to sync to",
            "type": "array"
          },
          "connectLink": {
            "title": "connect_link is the URL to initiate OAuth connection for direct sync sources",
            "type": "string"
          },
          "ecosystemSources": {
            "items": {
              "$ref": "#/components/schemas/v1EcosystemSource"
            },
            "title": "ecosystem_sources lists secondary directories that receive data when syncing to this primary directory\nExample: syncing to Neustar also syncs to dozens of downstream directories",
            "type": "array"
          },
          "hidden": {
            "title": "hidden indicates this directory is not shown in the UI (e.g., disabled by partner, not applicable to business category)",
            "type": "boolean"
          },
          "hiddenReason": {
            "title": "hidden_reason explains why the directory is hidden (e.g., \"Not available in your region\", \"Not compatible with your business category\")",
            "type": "string"
          },
          "iconUrl": {
            "title": "icon_url is the URL to the directory's logo/icon for display purposes",
            "type": "string"
          },
          "isListingVerified": {
            "title": "is_listing_verified indicates the business owner has manually verified this listing as accurate",
            "type": "boolean"
          },
          "isSyncingEnabled": {
            "title": "is_syncing_enabled indicates if automatic syncing is turned on for this directory\nFalse means changes to the business profile won't propagate to this directory",
            "type": "boolean"
          },
          "listingId": {
            "title": "listing_id is the internal identifier for this listing in the Core Services system",
            "type": "string"
          },
          "listingUrl": {
            "title": "listing_url is the public-facing URL where the listing can be viewed on the directory\nEmpty if listing not found or claimed by someone else",
            "type": "string"
          },
          "locked": {
            "title": "locked indicates syncing cannot be enabled due to business constraints (e.g., missing required fields, account not eligible)",
            "type": "boolean"
          },
          "maxScore": {
            "format": "int64",
            "title": "max_score is the maximum possible score for this directory (usually 100, but varies by directory capabilities)",
            "type": "string"
          },
          "name": {
            "title": "name is the human-readable directory name (e.g., \"Google\", \"Yelp\", \"Facebook\", \"Bing Places\")",
            "type": "string"
          },
          "provider": {
            "$ref": "#/components/schemas/v1Provider"
          },
          "requirement": {
            "$ref": "#/components/schemas/v1SyncRequirement"
          },
          "score": {
            "format": "int64",
            "title": "score is the current accuracy score (0-100) representing how complete and accurate this listing is",
            "type": "string"
          },
          "sourceId": {
            "title": "source_id is the numeric ID uniquely identifying this directory (e.g., \"1\" for Google, \"2\" for Facebook)",
            "type": "string"
          },
          "sourceType": {
            "title": "source_type categorizes the directory (e.g., \"search_engine\", \"social_network\", \"review_site\", \"data_aggregator\")",
            "type": "string"
          },
          "syncDetails": {
            "$ref": "#/components/schemas/v1SyndicationStatus"
          },
          "syncStatus": {
            "$ref": "#/components/schemas/v1SyncStatus"
          }
        },
        "type": "object"
      },
      "v1SyncRequirement": {
        "default": "SYNC_REQUIREMENT_UNSET",
        "description": "SyncRequirement specifies what product activation is needed to automatically sync to a directory.\nThis explains why a directory might not be available for a particular business.\n\n - SYNC_REQUIREMENT_UNSET: SYNC_REQUIREMENT_UNSET means no specific requirement (e.g., manual submission via RM, or direct OAuth)\n - SYNC_REQUIREMENT_LSP: SYNC_REQUIREMENT_LSP requires an active Listing Sync Pro subscription (either Yext or Uberall)\n - SYNC_REQUIREMENT_PRO_EDITION: SYNC_REQUIREMENT_PRO_EDITION requires Local SEO Pro edition\n - SYNC_REQUIREMENT_YEXT_LSP: SYNC_REQUIREMENT_YEXT_LSP specifically requires Yext-based Listing Sync Pro\nThis directory is only available through Yext, not Uberall\n - SYNC_REQUIREMENT_UBERALL_LSP: SYNC_REQUIREMENT_UBERALL_LSP specifically requires Uberall-based Listing Sync Pro\nThis directory is only available through Uberall, not Yext\n - SYNC_REQUIREMENT_LSP_OR_PRO_EDITION: SYNC_REQUIREMENT_LSP_OR_PRO_EDITION requires either Listing Sync Pro OR Local SEO Pro",
        "enum": [
          "SYNC_REQUIREMENT_UNSET",
          "SYNC_REQUIREMENT_LSP",
          "SYNC_REQUIREMENT_PRO_EDITION",
          "SYNC_REQUIREMENT_YEXT_LSP",
          "SYNC_REQUIREMENT_UBERALL_LSP",
          "SYNC_REQUIREMENT_LSP_OR_PRO_EDITION"
        ],
        "type": "string"
      },
      "v1SyncStatus": {
        "default": "SYNC_STATUS_UNSET",
        "description": "SyncStatus represents the current state of syncing to a directory.\nThis is the high-level status that determines what action a user should take.\n\n - SYNC_STATUS_UNSET: SYNC_STATUS_UNSET means syncing has not been attempted or is not enabled for this directory.\nUser action: Enable syncing if they want this directory to be kept up to date.\n - SYNC_STATUS_SYNCING: SYNC_STATUS_SYNCING means a sync is currently in progress.\nUser action: Wait for sync to complete. Check sync_details for progress.\n - SYNC_STATUS_PARTIALLY_SYNCED: SYNC_STATUS_PARTIALLY_SYNCED means some fields synced successfully but others failed or have warnings.\nUser action: Review sync_details.detailed_results to see which fields failed and why.\n - SYNC_STATUS_SUCCESS: SYNC_STATUS_SUCCESS means the listing synced successfully and all fields are up to date.\nUser action: None required. Listing is healthy.\n - SYNC_STATUS_FAILED: SYNC_STATUS_FAILED means the sync attempt failed completely.\nUser action: Review sync_details.error_message for the failure reason. Common causes:\n- Missing required fields (phone, address, category)\n- Invalid data format (bad phone number, malformed URL)\n- Directory-specific restrictions (business type not allowed, location not supported)\n- Authentication issues (OAuth token expired, connection broken)\n - SYNC_STATUS_CLAIMED: SYNC_STATUS_CLAIMED means the listing exists but is claimed/owned by someone else.\nUser action: Business owner must claim/verify ownership on the directory before we can sync.\nThis is common for Google, Yelp, and other directories that require ownership verification.\n - SYNC_STATUS_UNAVAILABLE: SYNC_STATUS_UNAVAILABLE means we cannot sync to this directory due to eligibility constraints.\nUser action: Check hidden_reason for explanation (e.g., \"Not available in your country\", \"Requires LSP subscription\")\n - SYNC_STATUS_SUBMITTED: SYNC_STATUS_SUBMITTED means data was sent to the directory but we don't have confirmation of success.\nThis is used for directories (like Data Axle, Neustar) that don't provide real-time sync confirmation.\nUser action: Wait 24-48 hours for the directory to process the submission.\n - SYNC_STATUS_NOT_CONNECTED: SYNC_STATUS_NOT_CONNECTED means no OAuth account has been connected for this direct sync source.\nUser action: Connect an account via OAuth to enable syncing.\nThis applies to direct sync sources (Google, Facebook, X, Apple) that require OAuth.\n - SYNC_STATUS_RECONNECT_REQUIRED: SYNC_STATUS_RECONNECT_REQUIRED means an OAuth account was previously connected but the token is broken,\nexpired, or the account is no longer authenticated. Data may be stale.\nUser action: Reconnect the account via OAuth to resume syncing.\nThis is more urgent than NOT_CONNECTED as there may be stale data from the previous connection.",
        "enum": [
          "SYNC_STATUS_UNSET",
          "SYNC_STATUS_SYNCING",
          "SYNC_STATUS_PARTIALLY_SYNCED",
          "SYNC_STATUS_SUCCESS",
          "SYNC_STATUS_FAILED",
          "SYNC_STATUS_CLAIMED",
          "SYNC_STATUS_UNAVAILABLE",
          "SYNC_STATUS_SUBMITTED",
          "SYNC_STATUS_NOT_CONNECTED",
          "SYNC_STATUS_RECONNECT_REQUIRED"
        ],
        "type": "string"
      },
      "v1SyndicationStatus": {
        "description": "SyndicationStatus contains detailed sync execution information for a directory.\nThis provides the forensic details needed to diagnose why a sync failed or is taking longer than expected.",
        "properties": {
          "detailedResults": {
            "items": {
              "$ref": "#/components/schemas/v1DetailedSyndicationStatusResults"
            },
            "title": "detailed_results contains field-by-field sync results showing which fields succeeded and which failed\nCritical for answering \"why did only some of my fields sync?\"",
            "type": "array"
          },
          "lastAttemptedOn": {
            "format": "date-time",
            "readOnly": true,
            "title": "Output only. When the most recent sync attempt started (successful or failed).\nUse this to determine \"when did we last try to sync?\"",
            "type": "string"
          },
          "lastSucceededOn": {
            "description": "Output only. When the most recent successful sync completed.\nIf this is significantly older than last_attempted_on, syncs are failing.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          },
          "lastSuccessfulAttemptId": {
            "title": "last_successful_attempt_id is the workflow execution ID for the most recent successful sync (for debugging)",
            "type": "string"
          },
          "lastSyncAttemptId": {
            "title": "last_sync_attempt_id is the workflow execution ID for the most recent sync attempt (for debugging)",
            "type": "string"
          },
          "listingExternalId": {
            "title": "listing_external_id is the directory's internal ID for this listing (e.g., Google Place ID, Yelp Business ID)",
            "type": "string"
          },
          "listingUrl": {
            "title": "listing_url is the public URL where this listing can be viewed on the directory",
            "type": "string"
          },
          "metadata": {
            "items": {
              "$ref": "#/components/schemas/v1Metadata"
            },
            "title": "metadata contains additional key-value pairs with sync-specific information",
            "type": "array"
          },
          "status": {
            "title": "status is a human-readable status message (may contain error details)",
            "type": "string"
          },
          "updated": {
            "description": "Output only. When this sync status was last modified.",
            "format": "date-time",
            "readOnly": true,
            "type": "string"
          }
        },
        "type": "object"
      },
      "v1TimeOfDay": {
        "description": "Represents a time of day. The date and time zone are either not significant\nor are specified elsewhere. An API may choose to allow leap seconds. Related\ntypes are [google.type.Date][google.type.Date] and\n`google.protobuf.Timestamp`.",
        "properties": {
          "hours": {
            "description": "Hours of day in 24 hour format. Should be from 0 to 23. An API may choose\nto allow the value \"24:00:00\" for scenarios like business closing time.",
            "format": "int32",
            "type": "integer"
          },
          "minutes": {
            "description": "Minutes of hour of day. Must be from 0 to 59.",
            "format": "int32",
            "type": "integer"
          },
          "nanos": {
            "description": "Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999.",
            "format": "int32",
            "type": "integer"
          },
          "seconds": {
            "description": "Seconds of minutes of the time. Must normally be from 0 to 59. An API may\nallow the value 60 if it allows leap-seconds.",
            "format": "int32",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "v1UpdateListingProfileRequest": {
        "description": "Applies one or more field-level changes to a business's listing profile. Changes are executed in order and then synced to connected directories.",
        "properties": {
          "businessId": {
            "description": "Required. The business whose listing profile should be updated.",
            "type": "string"
          },
          "ifUnmodifiedSince": {
            "description": "Optional. Optimistic-concurrency guard. If set, the update fails when the profile has been\nmodified after this timestamp. Similar to HTTP If-Unmodified-Since.",
            "format": "date-time",
            "type": "string"
          },
          "languageCode": {
            "description": "Optional. BCP-47 language code for locale-specific field values (e.g., \"en\", \"fr\").",
            "type": "string"
          },
          "updateOperations": {
            "description": "Required. Ordered list of field-level changes to apply (e.g., set name, add category, update hours).",
            "items": {
              "$ref": "#/components/schemas/v1UpdateOperation"
            },
            "type": "array"
          }
        },
        "required": [
          "businessId",
          "updateOperations"
        ],
        "title": "UpdateListingProfileRequest",
        "type": "object"
      },
      "v1UpdateOperation": {
        "description": "UpdateOperation represents a single field-level change to a listing profile.\nChoose exactly one oneof field that covers the data you want to modify, then set\nfield_mask to the specific sub-fields within that message.",
        "properties": {
          "bingAttributes": {
            "$ref": "#/components/schemas/v1BingAttributes"
          },
          "businessHours": {
            "$ref": "#/components/schemas/v1BusinessHours"
          },
          "externalIdentifiers": {
            "$ref": "#/components/schemas/v1ExternalIdentifiers"
          },
          "fieldMask": {
            "$ref": "#/components/schemas/vendastatypesFieldMask"
          },
          "googleAttributes": {
            "$ref": "#/components/schemas/v1GoogleAttributes"
          },
          "googleServices": {
            "$ref": "#/components/schemas/v1GoogleServices"
          },
          "hoursOfOperation": {
            "$ref": "#/components/schemas/v1HoursOfOperation"
          },
          "legacyProductDetails": {
            "$ref": "#/components/schemas/v1LegacyProductDetails"
          },
          "marketingInfo": {
            "$ref": "#/components/schemas/v1MarketingInfo"
          },
          "nap": {
            "$ref": "#/components/schemas/listing_productsv1Location"
          },
          "richData": {
            "$ref": "#/components/schemas/v1RichData"
          },
          "socialUrls": {
            "$ref": "#/components/schemas/v1SocialURLs"
          }
        },
        "type": "object"
      },
      "v1Vicinity": {
        "default": "VICINITY_UNDEFINED",
        "enum": [
          "VICINITY_UNDEFINED",
          "VICINITY_CITY",
          "VICINITY_A1",
          "VICINITY_A2",
          "VICINITY_A3",
          "VICINITY_A4",
          "VICINITY_A5",
          "VICINITY_B1",
          "VICINITY_B2",
          "VICINITY_B3",
          "VICINITY_B4",
          "VICINITY_B5",
          "VICINITY_C1",
          "VICINITY_C2",
          "VICINITY_C3",
          "VICINITY_C4",
          "VICINITY_C5",
          "VICINITY_D1",
          "VICINITY_D2",
          "VICINITY_D3",
          "VICINITY_D4",
          "VICINITY_D5",
          "VICINITY_E1",
          "VICINITY_E2",
          "VICINITY_E3",
          "VICINITY_E4",
          "VICINITY_E5"
        ],
        "type": "string"
      },
      "vendastatypesFieldMask": {
        "description": "paths: \"f.a\"\n    paths: \"f.b.d\"\n\nHere `f` represents a field in some root message, `a` and `b`\nfields in the message found in `f`, and `d` a field found in the\nmessage in `f.b`.\n\nField masks are used to specify a subset of fields that should be\nreturned by a get operation or modified by an update operation.\nField masks also have a custom JSON encoding (see below).\n\n# Field Masks in Projections\n\nWhen used in the context of a projection, a response message or\nsub-message is filtered by the API to only contain those fields as\nspecified in the mask. For example, if the mask in the previous\nexample is applied to a response message as follows:\n\n    f {\n      a : 22\n      b {\n        d : 1\n        x : 2\n      }\n      y : 13\n    }\n    z: 8\n\nThe result will not contain specific values for fields x,y and z\n(their value will be set to the default, and omitted in proto text\noutput):\n\n\n    f {\n      a : 22\n      b {\n        d : 1\n      }\n    }\n\nA repeated field is not allowed except at the last position of a\npaths string.\n\nIf a FieldMask object is not present in a get operation, the\noperation applies to all fields (as if a FieldMask of all fields\nhad been specified).\n\nNote that a field mask does not necessarily apply to the\ntop-level response message. In case of a REST get operation, the\nfield mask applies directly to the response, but in case of a REST\nlist operation, the mask instead applies to each individual message\nin the returned resource list. In case of a REST custom method,\nother definitions may be used. Where the mask applies will be\nclearly documented together with its declaration in the API.  In\nany case, the effect on the returned resource/resources is required\nbehavior for APIs.\n\n# Field Masks in Update Operations\n\nA field mask in update operations specifies which fields of the\ntargeted resource are going to be updated. The API is required\nto only change the values of the fields as specified in the mask\nand leave the others untouched. If a resource is passed in to\ndescribe the updated values, the API ignores the values of all\nfields not covered by the mask.\n\nIf a repeated field is specified for an update operation, the existing\nrepeated values in the target resource will be overwritten by the new values.\nNote that a repeated field is only allowed in the last position of a `paths`\nstring.\n\nIf a sub-message is specified in the last position of the field mask for an\nupdate operation, then the existing sub-message in the target resource is\noverwritten. Given the target message:\n\n    f {\n      b {\n        d : 1\n        x : 2\n      }\n      c : 1\n    }\n\nAnd an update message:\n\n    f {\n      b {\n        d : 10\n      }\n    }\n\nthen if the field mask is:\n\n paths: \"f.b\"\n\nthen the result will be:\n\n    f {\n      b {\n        d : 10\n      }\n      c : 1\n    }\n\nHowever, if the update mask was:\n\n paths: \"f.b.d\"\n\nthen the result would be:\n\n    f {\n      b {\n        d : 10\n        x : 2\n      }\n      c : 1\n    }\n\nIn order to reset a field's value to the default, the field must\nbe in the mask and set to the default value in the provided resource.\nHence, in order to reset all fields of a resource, provide a default\ninstance of the resource and set all fields in the mask, or do\nnot provide a mask as described below.\n\nIf a field mask is not present on update, the operation applies to\nall fields (as if a field mask of all fields has been specified).\nNote that in the presence of schema evolution, this may mean that\nfields the client does not know and has therefore not filled into\nthe request will be reset to their default. If this is unwanted\nbehavior, a specific service may require a client to always specify\na field mask, producing an error if not.\n\nAs with get operations, the location of the resource which\ndescribes the updated values in the request message depends on the\noperation kind. In any case, the effect of the field mask is\nrequired to be honored by the API.\n\n## Considerations for HTTP REST\n\nThe HTTP kind of an update operation which uses a field mask must\nbe set to PATCH instead of PUT in order to satisfy HTTP semantics\n(PUT must only be used for full updates).\n\n# JSON Encoding of Field Masks\n\nIn JSON, a field mask is encoded as a single string where paths are\nseparated by a comma. Fields name in each path are converted\nto/from lower-camel naming conventions.\n\nAs an example, consider the following message declarations:\n\n    message Profile {\n      User user = 1;\n      Photo photo = 2;\n    }\n    message User {\n      string display_name = 1;\n      string address = 2;\n    }\n\nIn proto a field mask for `Profile` may look as such:\n\n    mask {\n      paths: \"user.display_name\"\n      paths: \"photo\"\n    }\n\nIn JSON, the same mask is represented as below:\n\n    {\n      mask: \"user.displayName,photo\"\n    }\n\n# Field Masks and Oneof Fields\n\nField masks treat fields in oneofs just as regular fields. Consider the\nfollowing message:\n\n    message SampleMessage {\n      oneof test_oneof {\n        string name = 4;\n        SubMessage sub_message = 9;\n      }\n    }\n\nThe field mask can be:\n\n    mask {\n      paths: \"name\"\n    }\n\nOr:\n\n    mask {\n      paths: \"sub_message\"\n    }\n\nNote that oneof type names (\"test_oneof\" in this case) cannot be used in\npaths.",
        "properties": {
          "paths": {
            "description": "The set of field mask paths.",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "title": "`FieldMask` represents a set of symbolic field paths, for example:",
        "type": "object"
      }
    },
    "securitySchemes": {
      "OAuth2": {
        "flows": {
          "authorizationCode": {
            "authorizationUrl": "https://sso-api-prod.apigateway.co/oauth2/auth",
            "scopes": {
              "admin": "Allows the application to perform administrative tasks that you have access to across the platform",
              "business-app": "Allows the application to manage all features of Business App"
            },
            "tokenUrl": "https://sso-api-prod.apigateway.co/oauth2/token"
          }
        },
        "type": "oauth2"
      }
    }
  },
  "info": {
    "title": "Listing Products",
    "version": "1.210.0"
  },
  "openapi": "3.0.0",
  "paths": {
    "/v1/listing-products/get-keyword-data": {
      "post": {
        "operationId": "SEOService_GetLocalSearchSEOData",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v1GetLocalSearchSEODataRequest"
              }
            }
          },
          "description": "Request to fetch detailed vicinity/local search data for a specific keyword, showing search results from multiple geographic locations around the business.",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetLocalSearchSEODataResponse"
                }
              }
            },
            "description": "A successful response."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/rpcStatus"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "security": [
          {
            "OAuth2": [
              "business-app"
            ]
          }
        ],
        "summary": "Get Local Search SEO Data",
        "tags": [
          "SEOService"
        ]
      }
    },
    "/v1/listing-products/keyword/favourite": {
      "post": {
        "operationId": "SEOService_SaveSEOSettings",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v1SaveSEOSettingsRequest"
              }
            }
          },
          "description": "Request to save SEO settings for a business, including local search radius and favorite keywords.",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "A successful response."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/rpcStatus"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "security": [
          {
            "OAuth2": [
              "business-app"
            ]
          }
        ],
        "summary": "Save SEO Settings",
        "tags": [
          "SEOService"
        ]
      }
    },
    "/v1/listing-products/keyword/update": {
      "post": {
        "operationId": "ListingProfileService_Update",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v1UpdateListingProfileRequest"
              }
            }
          },
          "description": "Applies one or more field-level changes to a business's listing profile. Changes are executed in order and then synced to connected directories.",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            },
            "description": "A successful response."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/rpcStatus"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "security": [
          {
            "OAuth2": [
              "business-app"
            ]
          }
        ],
        "summary": "Update Listing Profile",
        "tags": [
          "ListingProfileService"
        ]
      }
    },
    "/v1/listings/get-citation-data": {
      "post": {
        "operationId": "Citations_GetCitationData",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v1GetCitationDataRequest"
              }
            }
          },
          "description": "Request to retrieve citation data for a business, including citation counts, historical trends, and citations grouped by domain.",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetCitationDataResponse"
                }
              }
            },
            "description": "A successful response."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/rpcStatus"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "summary": "Get Citation Data",
        "tags": [
          "Citations"
        ]
      }
    },
    "/v1/listings/get-listing-source-by-id": {
      "post": {
        "operationId": "ListingSourceService_GetListingSourceById",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v1GetListingSourceByIdRequest"
              }
            }
          },
          "description": "Request to retrieve detailed configuration for a specific listing directory by its numeric ID.",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetListingSourceByIdResponse"
                }
              }
            },
            "description": "A successful response."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/rpcStatus"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "security": [
          {
            "OAuth2": [
              "admin"
            ]
          }
        ],
        "summary": "Get Listing Source By Id",
        "tags": [
          "ListingSourceService"
        ]
      }
    },
    "/v1/listings/get-listing-sources": {
      "post": {
        "operationId": "ListingSourceService_GetListingSources",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v1GetListingSourcesRequest"
              }
            }
          },
          "description": "Request to fetch all listing sources, optionally filtered by provider.",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetListingSourcesResponse"
                }
              }
            },
            "description": "A successful response."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/rpcStatus"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "security": [
          {
            "OAuth2": [
              "admin"
            ]
          }
        ],
        "summary": "Get Listing Sources",
        "tags": [
          "ListingSourceService"
        ]
      }
    },
    "/v1/listings/get-sync-data": {
      "post": {
        "operationId": "ListingProductsService_GetSyncData",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/v1GetSyncDataRequest"
              }
            }
          },
          "description": "Request to retrieve comprehensive sync status and listing accuracy data for a business across all directory sources.",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/v1GetSyncDataResponse"
                }
              }
            },
            "description": "A successful response."
          },
          "default": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/rpcStatus"
                }
              }
            },
            "description": "An unexpected error response."
          }
        },
        "security": [
          {
            "OAuth2": [
              "business-app"
            ]
          }
        ],
        "summary": "Get Sync Data",
        "tags": [
          "ListingProductsService"
        ]
      }
    }
  },
  "servers": [
    {
      "description": "Production",
      "url": "https://prod.apigateway.co/grpc"
    }
  ],
  "tags": [
    {
      "name": "ListingProductsService"
    },
    {
      "name": "ListingSourceService"
    },
    {
      "name": "ListingProfileService"
    },
    {
      "name": "SEOService"
    },
    {
      "name": "Citations"
    }
  ]
}