{
  "kind": "discovery#restDescription",
  "discoveryVersion": "v1",
  "id": "mybusiness:v4",
  "name": "mybusiness",
  "canonicalName": "My Business",
  "version": "v4",
  "revision": "0",
  "title": "Google My Business API",
  "description": "The Google My Business API provides an interface for managing business location information on Google.",
  "ownerDomain": "google.com",
  "ownerName": "Google",
  "icons": {
    "x16": "http://www.google.com/images/icons/product/search-16.gif",
    "x32": "http://www.google.com/images/icons/product/search-32.gif"
   },
  "documentationLink": "https://developers.google.com/my-business/",
  "protocol": "rest",
  "rootUrl": "https://mybusiness.googleapis.com/",
  "servicePath": "",
  "baseUrl": "https://mybusiness.googleapis.com/",
  "batchPath": "batch",
  "version_module": true,
  "fullyEncodeReservedExpansion": true,
  "parameters": {
    "access_token": {
      "type": "string",
      "description": "OAuth access token.",
      "location": "query"
    },
    "alt": {
      "type": "string",
      "description": "Data format for response.",
      "default": "json",
      "enum": [
        "json",
        "media",
        "proto"
      ],
      "enumDescriptions": [
        "Responses with Content-Type of application/json",
        "Media download with context-dependent Content-Type",
        "Responses with Content-Type of application/x-protobuf"
      ],
      "location": "query"
    },
    "callback": {
      "type": "string",
      "description": "JSONP",
      "location": "query"
    },
    "fields": {
      "type": "string",
      "description": "Selector specifying which fields to include in a partial response.",
      "location": "query"
    },
    "key": {
      "type": "string",
      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
      "location": "query"
    },
    "oauth_token": {
      "type": "string",
      "description": "OAuth 2.0 token for the current user.",
      "location": "query"
    },
    "prettyPrint": {
      "type": "boolean",
      "description": "Returns response with indentations and line breaks.",
      "default": "true",
      "location": "query"
    },
    "quotaUser": {
      "type": "string",
      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
      "location": "query"
    },
    "upload_protocol": {
      "type": "string",
      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
      "location": "query"
    },
    "uploadType": {
      "type": "string",
      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
      "location": "query"
    },
    "$.xgafv": {
      "type": "string",
      "description": "V1 error format.",
      "enum": [
        "1",
        "2"
      ],
      "enumDescriptions": [
        "v1 error format",
        "v2 error format"
      ],
      "location": "query"
    }
  },
  "schemas": {
    "ListAccountsResponse": {
      "id": "ListAccountsResponse",
      "description": "Response message for Accounts.ListAccounts.",
      "type": "object",
      "properties": {
        "accounts": {
          "description": "A collection of accounts to which the user has access. The personal\naccount of the user doing the query will always be the first item of the\nresult, unless it is filtered out.",
          "type": "array",
          "items": {
            "$ref": "Account"
          }
        },
        "nextPageToken": {
          "description": "If the number of accounts exceeds the requested page size, this field is\npopulated with a token to fetch the next page of accounts on a\nsubsequent call to `accounts.list`. If there are no more accounts, this\nfield is not present in the response.",
          "type": "string"
        }
      }
    },
    "Account": {
      "id": "Account",
      "description": "An account is a container for your business's locations. If you are the only\nuser who manages locations for your business, you can use your personal\nGoogle Account. To share management of locations with multiple users,\n[create a business account]\n(https:\/\/support.google.com\/business\/answer\/6085339?ref_topic=6085325).",
      "type": "object",
      "properties": {
        "name": {
          "description": "The resource name, in the format `accounts\/{account_id}`.",
          "type": "string"
        },
        "accountName": {
          "description": "The name of the account. <aside class=\"note\"><b>Note:<\/b> For an account\nwith AccountType `PERSONAL`,\nthis is the first and last name of the user account.<\/aside>",
          "type": "string"
        },
        "type": {
          "description": "Output only. Specifies the AccountType\nof this account.",
          "enumDescriptions": [
            "Not specified.",
            "An end-user account.",
            "A group of Locations.",
            "A User Group for segregating organization staff in groups.",
            "An organization representing a company."
          ],
          "type": "string",
          "enum": [
            "ACCOUNT_TYPE_UNSPECIFIED",
            "PERSONAL",
            "LOCATION_GROUP",
            "USER_GROUP",
            "ORGANIZATION"
          ]
        },
        "role": {
          "description": "Output only. Specifies the AccountRole\nthe caller has for this account.",
          "enumDescriptions": [
            "Not specified.",
            "The user owns this account. (Displays as 'Primary Owner' in UI).",
            "The user is a co-owner of the account. (Displays as 'Owner' in UI).",
            "The user can manage this account.",
            "The user can manage social (Google+) pages for the account.\n(Displays as 'Site Manager' in UI)."
          ],
          "type": "string",
          "enum": [
            "ACCOUNT_ROLE_UNSPECIFIED",
            "OWNER",
            "CO_OWNER",
            "MANAGER",
            "COMMUNITY_MANAGER"
          ]
        },
        "state": {
          "description": "Output only. Indicates the AccountState of this account.",
          "$ref": "AccountState"
        },
        "profilePhotoUrl": {
          "description": "Profile photo for the account. This is populated only for the personal\naccount.",
          "type": "string"
        },
        "accountNumber": {
          "description": "Account reference number if provisioned.",
          "type": "string"
        },
        "permissionLevel": {
          "description": "Output only. Specifies the PermissionLevel the caller has for this account.",
          "enumDescriptions": [
            "Not specified.",
            "The user has owner level permission.",
            "The user has member level permission."
          ],
          "type": "string",
          "enum": [
            "PERMISSION_LEVEL_UNSPECIFIED",
            "OWNER_LEVEL",
            "MEMBER_LEVEL"
          ]
        },
        "organizationInfo": {
          "description": "Additional info for an organization. This is populated only for an\norganization account.",
          "$ref": "OrganizationInfo"
        }
      }
    },
    "AccountState": {
      "id": "AccountState",
      "description": "Indicates status of the account, such as whether the account\nhas been verified by Google.",
      "type": "object",
      "properties": {
        "status": {
          "description": "If verified, future locations that are created are automatically\nconnected to Google Maps, and have Google+ pages created, without requiring\nmoderation.",
          "enumDescriptions": [
            "Not specified.",
            "Verified account.",
            "Account that is not verified, and verification has not",
            "Account that is not verified, but"
          ],
          "type": "string",
          "enum": [
            "ACCOUNT_STATUS_UNSPECIFIED",
            "VERIFIED",
            "UNVERIFIED",
            "VERIFICATION_REQUESTED"
          ]
        }
      }
    },
    "OrganizationInfo": {
      "id": "OrganizationInfo",
      "description": "Additional Info stored for an organization.",
      "type": "object",
      "properties": {
        "registeredDomain": {
          "description": "The registered domain for the account.",
          "type": "string"
        },
        "postalAddress": {
          "description": "The postal address for the account.",
          "$ref": "PostalAddress"
        },
        "phoneNumber": {
          "description": "The contact number for the organization.",
          "type": "string"
        }
      }
    },
    "PostalAddress": {
      "id": "PostalAddress",
      "description": "Represents a postal address, e.g. for postal delivery or payments addresses.\nGiven a postal address, a postal service can deliver items to a premise, P.O.\nBox or similar.\nIt is not intended to model geographical locations (roads, towns,\nmountains).\n\nIn typical usage an address would be created via user input or from importing\nexisting data, depending on the type of process.\n\nAdvice on address input \/ editing:\n - Use an i18n-ready address widget such as\n   https:\/\/github.com\/googlei18n\/libaddressinput)\n- Users should not be presented with UI elements for input or editing of\n  fields outside countries where that field is used.\n\nFor more guidance on how to use this schema, please see:\nhttps:\/\/support.google.com\/business\/answer\/6397478",
      "type": "object",
      "properties": {
        "revision": {
          "description": "The schema revision of the `PostalAddress`. This must be set to 0, which is\nthe latest revision.\n\nAll new revisions **must** be backward compatible with old revisions.",
          "type": "integer",
          "format": "int32"
        },
        "regionCode": {
          "description": "Required. CLDR region code of the country\/region of the address. This\nis never inferred and it is up to the user to ensure the value is\ncorrect. See http:\/\/cldr.unicode.org\/ and\nhttp:\/\/www.unicode.org\/cldr\/charts\/30\/supplemental\/territory_information.html\nfor details. Example: \"CH\" for Switzerland.",
          "type": "string"
        },
        "languageCode": {
          "description": "Optional. BCP-47 language code of the contents of this address (if\nknown). This is often the UI language of the input form or is expected\nto match one of the languages used in the address' country\/region, or their\ntransliterated equivalents.\nThis can affect formatting in certain countries, but is not critical\nto the correctness of the data and will never affect any validation or\nother non-formatting related operations.\n\nIf this value is not known, it should be omitted (rather than specifying a\npossibly incorrect default).\n\nExamples: \"zh-Hant\", \"ja\", \"ja-Latn\", \"en\".",
          "type": "string"
        },
        "postalCode": {
          "description": "Optional. Postal code of the address. Not all countries use or require\npostal codes to be present, but where they are used, they may trigger\nadditional validation with other parts of the address (e.g. state\/zip\nvalidation in the U.S.A.).",
          "type": "string"
        },
        "sortingCode": {
          "description": "Optional. Additional, country-specific, sorting code. This is not used\nin most regions. Where it is used, the value is either a string like\n\"CEDEX\", optionally followed by a number (e.g. \"CEDEX 7\"), or just a number\nalone, representing the \"sector code\" (Jamaica), \"delivery area indicator\"\n(Malawi) or \"post office indicator\" (e.g. C\u00F4te d'Ivoire).",
          "type": "string"
        },
        "administrativeArea": {
          "description": "Optional. Highest administrative subdivision which is used for postal\naddresses of a country or region.\nFor example, this can be a state, a province, an oblast, or a prefecture.\nSpecifically, for Spain this is the province and not the autonomous\ncommunity (e.g. \"Barcelona\" and not \"Catalonia\").\nMany countries don't use an administrative area in postal addresses. E.g.\nin Switzerland this should be left unpopulated.",
          "type": "string"
        },
        "locality": {
          "description": "Optional. Generally refers to the city\/town portion of the address.\nExamples: US city, IT comune, UK post town.\nIn regions of the world where localities are not well defined or do not fit\ninto this structure well, leave locality empty and use address_lines.",
          "type": "string"
        },
        "sublocality": {
          "description": "Optional. Sublocality of the address.\nFor example, this can be neighborhoods, boroughs, districts.",
          "type": "string"
        },
        "addressLines": {
          "description": "Unstructured address lines describing the lower levels of an address.\n\nBecause values in address_lines do not have type information and may\nsometimes contain multiple values in a single field (e.g.\n\"Austin, TX\"), it is important that the line order is clear. The order of\naddress lines should be \"envelope order\" for the country\/region of the\naddress. In places where this can vary (e.g. Japan), address_language is\nused to make it explicit (e.g. \"ja\" for large-to-small ordering and\n\"ja-Latn\" or \"en\" for small-to-large). This way, the most specific line of\nan address can be selected based on the language.\n\nThe minimum permitted structural representation of an address consists\nof a region_code with all remaining information placed in the\naddress_lines. It would be possible to format such an address very\napproximately without geocoding, but no semantic reasoning could be\nmade about any of the address components until it was at least\npartially resolved.\n\nCreating an address only containing a region_code and address_lines, and\nthen geocoding is the recommended way to handle completely unstructured\naddresses (as opposed to guessing which parts of the address should be\nlocalities or administrative areas).",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "recipients": {
          "description": "Optional. The recipient at the address.\nThis field may, under certain circumstances, contain multiline information.\nFor example, it might contain \"care of\" information.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "organization": {
          "description": "Optional. The name of the organization at the address.",
          "type": "string"
        }
      }
    },
    "GenerateAccountNumberRequest": {
      "id": "GenerateAccountNumberRequest",
      "description": "Request message for Accounts.GenerateAccountNumber.",
      "type": "object",
      "properties": {
      }
    },
    "Notifications": {
      "id": "Notifications",
      "description": "A Google Cloud Pub\/Sub topic where notifications can be published when a\nlocation is updated or has a new review. There will be only one notification\nsettings resource per-account.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Output only. The notifications resource name.",
          "type": "string"
        },
        "topicName": {
          "description": "The Google Cloud Pub\/Sub topic that will receive notifications when\nlocations managed by this account are updated. If unset, no notifications\nwill be posted.\n\nThe account mybusiness-api-pubsub@system.gserviceaccount.com must have at\nleast Publish permissions on the Cloud Pub\/Sub topic.",
          "type": "string"
        },
        "notificationTypes": {
          "description": "The types of notifications that will be sent to the Cloud Pub\/Sub topic.\nAt least one must be specified. To stop receiving notifications entirely,\nuse DeleteNotifications.",
          "enumDescriptions": [
            "No notification type. Will not match any notifications.",
            "The location has Google updates for review. The location_name field on the\nnotification will provide the resource name of the location with Google\nupdates.",
            "A new review has been added to the location. The review_name field on the\nnotification will provide the resource name of the review that was added,\nand location_name will have the location's resource name.",
            "A review on the location has been updated. The review_name field on the\nnotification will provide the resource name of the review that was added,\nand location_name will have the location's resource name.",
            "A new media item has been added to the location by a Google Maps user.\nThe notification will provide the resource name of the new media item."
          ],
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "NOTIFICATION_TYPE_UNSPECIFIED",
              "GOOGLE_UPDATE",
              "NEW_REVIEW",
              "UPDATED_REVIEW",
              "NEW_CUSTOMER_MEDIA"
            ]
          }
        }
      }
    },
    "Empty": {
      "id": "Empty",
      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
      "type": "object",
      "properties": {
      }
    },
    "AcceptInvitationRequest": {
      "id": "AcceptInvitationRequest",
      "description": "Request message for MyBusiness.AcceptInvitation.",
      "type": "object",
      "properties": {
      }
    },
    "DeclineInvitationRequest": {
      "id": "DeclineInvitationRequest",
      "description": "Request message for MyBusiness.DeclineInvitation.",
      "type": "object",
      "properties": {
      }
    },
    "ListInvitationsResponse": {
      "id": "ListInvitationsResponse",
      "description": "Response message for MyBusiness.ListInvitations.",
      "type": "object",
      "properties": {
        "invitations": {
          "description": "A collection of location invitations that are pending for the account. The\nnumber of invitations listed here cannot exceed 1000.",
          "type": "array",
          "items": {
            "$ref": "Invitation"
          }
        }
      }
    },
    "Invitation": {
      "id": "Invitation",
      "description": "Output only. Represents a pending invitation.",
      "type": "object",
      "properties": {
        "name": {
          "description": "The resource name for the invitation.",
          "type": "string"
        },
        "targetAccount": {
          "description": "The sparsely populated account this invitation is for.",
          "$ref": "Account"
        },
        "targetLocation": {
          "description": "The target location this invitation is for.",
          "$ref": "TargetLocation"
        },
        "role": {
          "description": "The invited role on the account.",
          "enumDescriptions": [
            "Not specified.",
            "The admin has owner-level access and is the primary owner.",
            "The admin has owner-level access.",
            "The admin has managerial access.",
            "The admin can manage social (Google+) pages."
          ],
          "type": "string",
          "enum": [
            "ADMIN_ROLE_UNSPECIFIED",
            "OWNER",
            "CO_OWNER",
            "MANAGER",
            "COMMUNITY_MANAGER"
          ]
        }
      }
    },
    "TargetLocation": {
      "id": "TargetLocation",
      "description": "Represents a target location for a pending invitation.",
      "type": "object",
      "properties": {
        "locationName": {
          "description": "The name of the location to which the user is invited.",
          "type": "string"
        },
        "locationAddress": {
          "description": "The address of the location to which the user is invited.",
          "type": "string"
        }
      }
    },
    "ListAccountAdminsResponse": {
      "id": "ListAccountAdminsResponse",
      "description": "Response message for MyBusiness.ListAccountAdmins.",
      "type": "object",
      "properties": {
        "admins": {
          "description": "A collection of Admin instances.",
          "type": "array",
          "items": {
            "$ref": "Admin"
          }
        }
      }
    },
    "Admin": {
      "id": "Admin",
      "description": "An administrator of an Account or a\nLocation.",
      "type": "object",
      "properties": {
        "name": {
          "description": "The resource name. For account admins, this is in the form:\n`accounts\/{account_id}\/admins\/{admin_id}`\n\nFor location admins, this is in the form:\n`accounts\/{account_id}\/locations\/{location_id}\/admins\/{admin_id}`",
          "type": "string"
        },
        "adminName": {
          "description": "The name of the admin. When making the initial invitation, this is the\ninvitee's email address. On `GET` calls, the user's email address is\nreturned if the invitation is still pending. Otherwise, it contains\nthe user's first and last names.",
          "type": "string"
        },
        "role": {
          "description": "Specifies the AdminRole that this\nadmin uses with the specified Account\nor Location resource.",
          "enumDescriptions": [
            "Not specified.",
            "The admin has owner-level access and is the primary owner.",
            "The admin has owner-level access.",
            "The admin has managerial access.",
            "The admin can manage social (Google+) pages."
          ],
          "type": "string",
          "enum": [
            "ADMIN_ROLE_UNSPECIFIED",
            "OWNER",
            "CO_OWNER",
            "MANAGER",
            "COMMUNITY_MANAGER"
          ]
        },
        "pendingInvitation": {
          "description": "Output only. Indicates whether this admin has a pending invitation for the\nspecified resource.",
          "type": "boolean"
        }
      }
    },
    "ListLocationAdminsResponse": {
      "id": "ListLocationAdminsResponse",
      "description": "Response message for MyBusiness.ListLocationAdmins.",
      "type": "object",
      "properties": {
        "admins": {
          "description": "A collection of Admin instances.",
          "type": "array",
          "items": {
            "$ref": "Admin"
          }
        }
      }
    },
    "ListBusinessCategoriesResponse": {
      "id": "ListBusinessCategoriesResponse",
      "type": "object",
      "properties": {
        "categories": {
          "description": "The categories.",
          "type": "array",
          "items": {
            "$ref": "Category"
          }
        },
        "totalCategoryCount": {
          "description": "The total number of categories for the request parameters.",
          "type": "integer",
          "format": "int32"
        },
        "nextPageToken": {
          "description": "If the number of categories exceeded the requested page size, this field\nwill be populated with a token to fetch the next page of categories\non a subsequent call to `ListBusinessCategories`.",
          "type": "string"
        }
      }
    },
    "Category": {
      "id": "Category",
      "description": "A category describing what this business is (not what it does). For a list of\nvalid category IDs, and the mappings to their human-readable names, see\n[categories.list](\/my-business\/reference\/rest\/v4\/categories\/list).",
      "type": "object",
      "properties": {
        "displayName": {
          "description": "Output only. The human-readable name of the category. This is set when\nreading the location. When modifying the location, `category_id` must be\nset.",
          "type": "string"
        },
        "categoryId": {
          "description": "A stable ID (provided by Google) for this category.\nThe `category_id` must be specified when modifying the category (when\ncreating or updating a location).",
          "type": "string"
        }
      }
    },
    "FollowersMetadata": {
      "id": "FollowersMetadata",
      "description": "Follower metadata for a location.",
      "type": "object",
      "properties": {
        "name": {
          "description": "The resource name for this.\naccounts\/{account_id}\/locations\/{location_id}\/followers\/metadata",
          "type": "string"
        },
        "count": {
          "description": "Total number of followers for the location.",
          "type": "string",
          "format": "uint64"
        }
      }
    },
    "SearchGoogleLocationsRequest": {
      "id": "SearchGoogleLocationsRequest",
      "description": "Request message for GoogleLocations.SearchGoogleLocations.",
      "type": "object",
      "properties": {
        "location": {
          "description": "Location to search for. If provided, will find locations which match the\nprovided location details.",
          "$ref": "Location"
        },
        "query": {
          "description": "Text query to search for. The search results from a query string will be\nless accurate than if providing an exact location, but can provide more\ninexact matches.",
          "type": "string"
        },
        "resultCount": {
          "description": "The number of matches to return. The default value is 3, with a maximum\nof 10. Note that latency may increase if more are requested. There is no\npagination.",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "Location": {
      "id": "Location",
      "description": "A location.\nSee the [help center article]\n(https:\/\/support.google.com\/business\/answer\/3038177) for a detailed\ndescription of these fields, or the [category\nendpoint](\/my-business\/reference\/rest\/v4\/categories) for a list of valid\nbusiness categories.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Google identifier for this location in the form:\n  `accounts\/{account_id}\/locations\/{location_id}`\n\nIn the context of matches, this field will not be populated.",
          "type": "string"
        },
        "languageCode": {
          "description": "The language of the location. Set during creation and not updateable.",
          "type": "string"
        },
        "storeCode": {
          "description": "External identifier for this location, which must be unique inside a given\naccount. This is a means of associating the location with your own records.",
          "type": "string"
        },
        "locationName": {
          "description": "Location name should reflect your business's real-world name, as used\nconsistently on your storefront, website, and stationery, and as known to\ncustomers.\nAny additional information, when relevant, can be included in other\nfields of the resource (for example, `Address`, `Categories`).\nDon't add unnecessary information to your name (for example, prefer\n\"Google\" over \"Google Inc. - Mountain View Corporate Headquarters\"). Don't\ninclude marketing taglines, store codes, special characters, hours or\nclosed\/open status, phone numbers, website URLs, service\/product\ninformation, location\/address or directions, or containment information\n(for example, \"Chase ATM in Duane Reade\").",
          "type": "string"
        },
        "primaryPhone": {
          "description": "A phone number that connects to your individual business location\nas directly as possible. Use a local phone number instead of a central,\ncall center helpline number whenever possible.",
          "type": "string"
        },
        "additionalPhones": {
          "description": "Up to two phone numbers (mobile or landline, no fax) at which your business\ncan be called, in addition to your primary phone number.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "address": {
          "description": "A precise, accurate address to describe your business location.\nPO boxes or mailboxes located at remote locations are not acceptable.\nAt this time, you can specify a maximum of five `address_lines` values in\nthe address.",
          "$ref": "PostalAddress"
        },
        "primaryCategory": {
          "description": "Category that best describes the core business this location engages in.",
          "$ref": "Category"
        },
        "additionalCategories": {
          "description": "Additional categories to describe your business.\nCategories help your customers find accurate, specific results for services\nthey're interested in. To keep your business information accurate\nand live, make sure that you use as few categories as possible to describe\nyour overall core business.\nChoose categories that are as specific as possible, but representative of\nyour main business.",
          "type": "array",
          "items": {
            "$ref": "Category"
          }
        },
        "websiteUrl": {
          "description": "A URL for this business. If possible, use a URL that represents this\nindividual business location instead of a generic website\/URL that\nrepresents all locations, or the brand.",
          "type": "string"
        },
        "regularHours": {
          "description": "Operating hours for the business.",
          "$ref": "BusinessHours"
        },
        "specialHours": {
          "description": "Special hours for the business. This typically includes holiday hours,\nand other times outside of regular operating hours.\nThese override regular business hours.",
          "$ref": "SpecialHours"
        },
        "serviceArea": {
          "description": "Service area businesses provide their service at the customer's location.\nIf this business is a service area business, this field describes the\narea(s) serviced by the business.",
          "$ref": "ServiceAreaBusiness"
        },
        "locationKey": {
          "description": "A collection of keys that link this business to\nother Google properties, such as a Google+ page and Google Maps Places.",
          "$ref": "LocationKey"
        },
        "labels": {
          "description": "A collection of free-form strings to allow you to tag your business. These\nlabels are NOT user facing; only you can see them.\nLimited to 255 characters (per label).",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "adWordsLocationExtensions": {
          "description": "Additional information that is surfaced in AdWords.",
          "$ref": "AdWordsLocationExtensions"
        },
        "latlng": {
          "description": "User-provided latitude and longitude.\nWhen creating a location, this field is ignored if the provided\naddress geocodes successfully.\nThis field is only returned on get requests if the user-provided\n`latlng`\nvalue was accepted during create, or the `latlng` value was updated through\nthe Google My Business website.\nThis field cannot be updated.",
          "$ref": "LatLng"
        },
        "openInfo": {
          "description": "A flag that indicates whether the location is currently open for\nbusiness.",
          "$ref": "OpenInfo"
        },
        "locationState": {
          "description": "Output only. A set of booleans that reflects the state of a location.",
          "$ref": "LocationState"
        },
        "attributes": {
          "description": "Attributes for this location.",
          "type": "array",
          "items": {
            "$ref": "Attribute"
          }
        },
        "metadata": {
          "description": "Output Only. Additional non-user-editable information.",
          "$ref": "Metadata"
        },
        "priceLists": {
          "description": "Price list information for this location.",
          "type": "array",
          "items": {
            "$ref": "PriceList"
          }
        },
        "profile": {
          "description": "Describes your business in your own voice and shares with users the unique\nstory of your business and offerings.",
          "$ref": "Profile"
        },
        "relationshipData": {
          "description": "All locations and chain related to this one.",
          "$ref": "RelationshipData"
        }
      }
    },
    "BusinessHours": {
      "id": "BusinessHours",
      "description": "Represents the time periods that this location is open for business.\nHolds a collection of TimePeriod\ninstances.",
      "type": "object",
      "properties": {
        "periods": {
          "description": "A collection of times that this location is open for business. Each period\nrepresents a range of hours when the location is open during the week.",
          "type": "array",
          "items": {
            "$ref": "TimePeriod"
          }
        }
      }
    },
    "TimePeriod": {
      "id": "TimePeriod",
      "description": "Represents a span of time that the business is open, starting on the\nspecified open\nday\/time and closing on the specified close day\/time.\nThe closing time must occur after the opening time, for example later in the\nsame day, or on a subsequent day.",
      "type": "object",
      "properties": {
        "openDay": {
          "description": "Indicates the day of the week this period starts\non.",
          "enumDescriptions": [
            "The unspecified day-of-week.",
            "The day-of-week of Monday.",
            "The day-of-week of Tuesday.",
            "The day-of-week of Wednesday.",
            "The day-of-week of Thursday.",
            "The day-of-week of Friday.",
            "The day-of-week of Saturday.",
            "The day-of-week of Sunday."
          ],
          "type": "string",
          "enum": [
            "DAY_OF_WEEK_UNSPECIFIED",
            "MONDAY",
            "TUESDAY",
            "WEDNESDAY",
            "THURSDAY",
            "FRIDAY",
            "SATURDAY",
            "SUNDAY"
          ]
        },
        "openTime": {
          "description": "Time in 24hr ISO 8601 extended format (hh:mm). Valid values are\n00:00-24:00, where 24:00 represents midnight at the end of the specified\nday field.",
          "type": "string"
        },
        "closeDay": {
          "description": "Indicates the day of the week this period ends\non.",
          "enumDescriptions": [
            "The unspecified day-of-week.",
            "The day-of-week of Monday.",
            "The day-of-week of Tuesday.",
            "The day-of-week of Wednesday.",
            "The day-of-week of Thursday.",
            "The day-of-week of Friday.",
            "The day-of-week of Saturday.",
            "The day-of-week of Sunday."
          ],
          "type": "string",
          "enum": [
            "DAY_OF_WEEK_UNSPECIFIED",
            "MONDAY",
            "TUESDAY",
            "WEDNESDAY",
            "THURSDAY",
            "FRIDAY",
            "SATURDAY",
            "SUNDAY"
          ]
        },
        "closeTime": {
          "description": "Time in 24hr ISO 8601 extended format (hh:mm). Valid values are\n00:00-24:00, where 24:00 represents midnight at the end of the specified\nday field.",
          "type": "string"
        }
      }
    },
    "SpecialHours": {
      "id": "SpecialHours",
      "description": "Represents a set of time periods when a location's operational hours differ\nfrom its normal business hours.",
      "type": "object",
      "properties": {
        "specialHourPeriods": {
          "description": "A list of exceptions to the business's regular hours.",
          "type": "array",
          "items": {
            "$ref": "SpecialHourPeriod"
          }
        }
      }
    },
    "SpecialHourPeriod": {
      "id": "SpecialHourPeriod",
      "description": "Represents a single time period when a location's operational hours differ\nfrom its normal business hours.\nA special hour period must represent a range of less than 24 hours.\nThe `open_time` and `start_date` must predate the `close_time` and\n`end_date`. The `close_time` and `end_date` can extend to 11:59 a.m. on the\nday after the specified `start_date`. For example, the following inputs are\nvalid:\n\n    start_date=2015-11-23, open_time=08:00, close_time=18:00\n    start_date=2015-11-23, end_date=2015-11-23, open_time=08:00,\n    close_time=18:00 start_date=2015-11-23, end_date=2015-11-24,\n    open_time=13:00, close_time=11:59\n\nThe following inputs are not valid:\n\n    start_date=2015-11-23, open_time=13:00, close_time=11:59\n    start_date=2015-11-23, end_date=2015-11-24, open_time=13:00,\n    close_time=12:00 start_date=2015-11-23, end_date=2015-11-25,\n    open_time=08:00, close_time=18:00",
      "type": "object",
      "properties": {
        "startDate": {
          "description": "The calendar date this special hour period starts on.",
          "$ref": "Date"
        },
        "openTime": {
          "description": "The wall time on `start_date` when a location opens, expressed in\n24hr ISO 8601 extended format. (hh:mm) Valid values are 00:00-24:00,\nwhere 24:00 represents midnight at the end of the specified day field.\nMust be specified if `is_closed` is false.",
          "type": "string"
        },
        "endDate": {
          "description": "The calendar date this special hour period ends on.\nIf `end_date` field is not set, default to the date specified in\n`start_date`.\nIf set, this field must be equal to or at most 1 day after `start_date`.",
          "$ref": "Date"
        },
        "closeTime": {
          "description": "The wall time on `end_date` when a location closes, expressed in\n24hr ISO 8601 extended format. (hh:mm) Valid values are 00:00-24:00,\nwhere 24:00 represents midnight at the end of the specified day field.\nMust be specified if `is_closed` is false.",
          "type": "string"
        },
        "isClosed": {
          "description": "If true, `end_date`, `open_time`, and `close_time` are ignored,\nand the date specified in `start_date` is treated as the location being\nclosed for the entire day.",
          "type": "boolean"
        }
      }
    },
    "Date": {
      "id": "Date",
      "description": "Represents a whole or partial calendar date, e.g. a birthday. The time of day\nand time zone are either specified elsewhere or are not significant. The date\nis relative to the Proleptic Gregorian Calendar. This can represent:\n\n* A full date, with non-zero year, month and day values\n* A month and day value, with a zero year, e.g. an anniversary\n* A year on its own, with zero month and day values\n* A year and month value, with a zero day, e.g. a credit card expiration date\n\nRelated types are google.type.TimeOfDay and `google.protobuf.Timestamp`.",
      "type": "object",
      "properties": {
        "year": {
          "description": "Year of date. Must be from 1 to 9999, or 0 if specifying a date without\na year.",
          "type": "integer",
          "format": "int32"
        },
        "month": {
          "description": "Month of year. Must be from 1 to 12, or 0 if specifying a year without a\nmonth and day.",
          "type": "integer",
          "format": "int32"
        },
        "day": {
          "description": "Day of month. Must be from 1 to 31 and valid for the year and month, or 0\nif specifying a year by itself or a year and month where the day is not\nsignificant.",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "ServiceAreaBusiness": {
      "id": "ServiceAreaBusiness",
      "description": "Service area businesses provide their service at the customer's location (for\nexample, a locksmith or plumber).",
      "type": "object",
      "properties": {
        "businessType": {
          "description": "Indicates the type of the service area\nbusiness.",
          "enumDescriptions": [
            "Output only. Not specified.",
            "Offers service only in the surrounding area (not at the business\naddress).",
            "Offers service at the business address and the surrounding area."
          ],
          "type": "string",
          "enum": [
            "BUSINESS_TYPE_UNSPECIFIED",
            "CUSTOMER_LOCATION_ONLY",
            "CUSTOMER_AND_BUSINESS_LOCATION"
          ]
        },
        "radius": {
          "description": "The area that this business serves centered around a point.",
          "$ref": "PointRadius"
        },
        "places": {
          "description": "The area that this business serves defined through a set of places.",
          "$ref": "Places"
        }
      }
    },
    "PointRadius": {
      "id": "PointRadius",
      "description": "A radius around a particular point (latitude\/longitude).",
      "type": "object",
      "properties": {
        "latlng": {
          "description": "The latitude\/longitude that specifies the center of an area defined by the\nradius.",
          "$ref": "LatLng"
        },
        "radiusKm": {
          "description": "The distance in kilometers of the area around the point.",
          "type": "number",
          "format": "float"
        }
      }
    },
    "LatLng": {
      "id": "LatLng",
      "description": "An object representing a latitude\/longitude pair. This is expressed as a pair\nof doubles representing degrees latitude and degrees longitude. Unless\nspecified otherwise, this must conform to the\n<a href=\"http:\/\/www.unoosa.org\/pdf\/icg\/2012\/template\/WGS_84.pdf\">WGS84\nstandard<\/a>. Values must be within normalized ranges.",
      "type": "object",
      "properties": {
        "latitude": {
          "description": "The latitude in degrees. It must be in the range [-90.0, +90.0].",
          "type": "number",
          "format": "double"
        },
        "longitude": {
          "description": "The longitude in degrees. It must be in the range [-180.0, +180.0].",
          "type": "number",
          "format": "double"
        }
      }
    },
    "Places": {
      "id": "Places",
      "description": "Defines the union of areas represented by a set of places.",
      "type": "object",
      "properties": {
        "placeInfos": {
          "description": "The areas represented by place IDs.",
          "type": "array",
          "items": {
            "$ref": "PlaceInfo"
          }
        }
      }
    },
    "PlaceInfo": {
      "id": "PlaceInfo",
      "description": "Defines an area that's represented by a place ID.",
      "type": "object",
      "properties": {
        "name": {
          "description": "The localized name of the place. For example, `Scottsdale, AZ`.",
          "type": "string"
        },
        "placeId": {
          "description": "The ID of the place.",
          "type": "string"
        }
      }
    },
    "LocationKey": {
      "id": "LocationKey",
      "description": "Alternate\/surrogate key references for a location.",
      "type": "object",
      "properties": {
        "plusPageId": {
          "description": "Output only. If this location has a Google+ page associated with it, this\nis populated with the Google+ page ID for this location.",
          "type": "string"
        },
        "placeId": {
          "description": "If this location has been verified and is connected to\/appears on Google\nMaps, this field is populated with the place ID for the location.\nThis ID can be used in various Places APIs.\n\nIf this location is unverified, this field may be populated if the location\nhas been associated with a place that appears on Google Maps.\n\nThis field can be set during Create calls, but not for Update.\n\nThe additional `explicit_no_place_id` bool qualifies whether an unset\nplace ID is deliberate or not.",
          "type": "string"
        },
        "explicitNoPlaceId": {
          "description": "Output only. A value of true indicates that an unset place ID is\ndeliberate, which is different from no association being made yet.",
          "type": "boolean"
        },
        "requestId": {
          "description": "Output only. The `request_id` used to create this location. May be empty if\nthis location was created outside of the GMB API or Google My Business\nLocations.",
          "type": "string"
        }
      }
    },
    "AdWordsLocationExtensions": {
      "id": "AdWordsLocationExtensions",
      "description": "Additional information that is surfaced in AdWords.",
      "type": "object",
      "properties": {
        "adPhone": {
          "description": "An alternate phone number to display on AdWords location extensions\ninstead of the location's primary phone number.",
          "type": "string"
        }
      }
    },
    "OpenInfo": {
      "id": "OpenInfo",
      "description": "Information related to the opening state of the business.",
      "type": "object",
      "properties": {
        "status": {
          "description": "Indicates whether or not the Location is currently open for business.\nAll locations are open by default, unless updated to be closed.",
          "enumDescriptions": [
            "Not specified.",
            "Indicates that the location is open.",
            "Indicates that the location has been permanently closed."
          ],
          "type": "string",
          "enum": [
            "OPEN_FOR_BUSINESS_UNSPECIFIED",
            "OPEN",
            "CLOSED_PERMANENTLY"
          ]
        },
        "canReopen": {
          "description": "Output only. Indicates whether this business is eligible for re-open.",
          "type": "boolean"
        },
        "openingDate": {
          "description": "The date on which the location first opened. If the exact day is not known,\nmonth and year only can be provided. The date must be in the past or be\nno more than one year in the future.",
          "$ref": "Date"
        }
      }
    },
    "LocationState": {
      "id": "LocationState",
      "description": "Contains a set of booleans that reflect the state of a Location.",
      "type": "object",
      "properties": {
        "isGoogleUpdated": {
          "description": "Output only. Indicates whether the place ID associated with this location\nhas updates.",
          "type": "boolean"
        },
        "isDuplicate": {
          "description": "Output only. Indicates whether the location is a duplicate of another\nlocation. For more information, see\n[metadata.duplicate](\/my-business\/reference\/rest\/v4\/accounts.locations#Duplicate).",
          "type": "boolean"
        },
        "isSuspended": {
          "description": "Output only. Indicates whether the location is suspended.\nSuspended locations are not visible to end users in Google products.\nIf you believe this was a mistake, see the [help center article]\n(https:\/\/support.google.com\/business\/answer\/4569145).",
          "type": "boolean"
        },
        "canUpdate": {
          "description": "Output only. Indicates whether the location can be updated.",
          "type": "boolean"
        },
        "canDelete": {
          "description": "Output only. Indicates whether the location can be deleted using the Google\nMy Business API.",
          "type": "boolean"
        },
        "isVerified": {
          "description": "Output only. Indicates whether the location is verified.",
          "type": "boolean"
        },
        "needsReverification": {
          "description": "Output only. Indicates whether the location requires reverification.",
          "type": "boolean"
        },
        "isPendingReview": {
          "description": "Output only. Indicates whether the review of the location is pending.",
          "type": "boolean"
        },
        "isDisabled": {
          "description": "Output only. Indicates whether the location is disabled.",
          "type": "boolean"
        },
        "isPublished": {
          "description": "Output only. Indicates whether the location is published.",
          "type": "boolean"
        },
        "isDisconnected": {
          "description": "Output only. Indicates whether the location is disconnected from a place on\nGoogle Maps.",
          "type": "boolean"
        },
        "isLocalPostApiDisabled": {
          "description": "Output only. Indicates whether\n[accounts.locations.localPosts](\/my-business\/reference\/rest\/v4\/accounts.locations.localPosts)\nis disabled for this location.",
          "type": "boolean"
        },
        "hasPendingEdits": {
          "description": "Output only. Indicates whether any of this Location's properties are in the\nedit pending state.",
          "type": "boolean"
        },
        "hasPendingVerification": {
          "description": "Output only. Indicates whether the location has pending verification\nrequests.",
          "type": "boolean"
        }
      }
    },
    "Attribute": {
      "id": "Attribute",
      "description": "A location attribute. Attributes provide additional information about a\nlocation. The attributes that can be set on a location may vary based on\nthe properties of that location (for example, category). Available attributes\nare determined by Google and may be added and removed without API changes.",
      "type": "object",
      "properties": {
        "attributeId": {
          "description": "The ID of the attribute. Attribute IDs are provided by Google.",
          "type": "string"
        },
        "valueType": {
          "description": "Output only. The type of value that this attribute contains. This should be\nused to determine how to interpret the value.",
          "enumDescriptions": [
            "Not specified.",
            "The values for this attribute are boolean values.",
            "The attribute has a predetermined list of available values that can be\nused. Metadata for this attribute will list these values.",
            "The values for this attribute are URLs.",
            "The attribute value is an enum with multiple possible values that can be\nexplicitly set or unset."
          ],
          "type": "string",
          "enum": [
            "ATTRIBUTE_VALUE_TYPE_UNSPECIFIED",
            "BOOL",
            "ENUM",
            "URL",
            "REPEATED_ENUM"
          ]
        },
        "values": {
          "description": "The values for this attribute. The type of the values supplied must match\nthat expected for that attribute; see\n[AttributeValueType](\/my-business\/reference\/rest\/v4\/AttributeValueType).\nThis is a repeated field where multiple attribute values may be provided.\nAttribute types only support one value.",
          "type": "array",
          "items": {
            "type": "any"
          }
        },
        "repeatedEnumValue": {
          "description": "When the attribute value type is REPEATED_ENUM, this contains the attribute\nvalue, and the other values fields must be empty.",
          "$ref": "RepeatedEnumAttributeValue"
        },
        "urlValues": {
          "description": "When the attribute value type is URL, this field contains the value(s) for\nthis attribute, and the other values fields must be empty.",
          "type": "array",
          "items": {
            "$ref": "UrlAttributeValue"
          }
        }
      }
    },
    "RepeatedEnumAttributeValue": {
      "id": "RepeatedEnumAttributeValue",
      "description": "Values for an attribute with a `value_type` of REPEATED_ENUM. This consists\nof two lists of value IDs: those that are set (true) and those that are unset\n(false). Values absent are considered unknown. At least one value must be\nspecified.",
      "type": "object",
      "properties": {
        "setValues": {
          "description": "Enum values that are set.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "unsetValues": {
          "description": "Enum values that are unset.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "UrlAttributeValue": {
      "id": "UrlAttributeValue",
      "description": "Values for an attribute with a `value_type` of URL.",
      "type": "object",
      "properties": {
        "url": {
          "description": "The URL.",
          "type": "string"
        }
      }
    },
    "Metadata": {
      "id": "Metadata",
      "description": "Additional non-user-editable information about the location.",
      "type": "object",
      "properties": {
        "duplicate": {
          "description": "Information about the location that this location duplicates. Only\npresent when `location_state.is_duplicate` is true.",
          "$ref": "Duplicate"
        },
        "mapsUrl": {
          "description": "A link to the location on Maps.",
          "type": "string"
        },
        "newReviewUrl": {
          "description": "A link to the page on Google Search where a customer can leave a review\nfor the location.",
          "type": "string"
        }
      }
    },
    "Duplicate": {
      "id": "Duplicate",
      "description": "Information about the location that this location duplicates.",
      "type": "object",
      "properties": {
        "locationName": {
          "description": "The resource name of the location that this duplicates. Only populated\nif the authenticated user has access rights to that location and that\nlocation is not deleted.",
          "type": "string"
        },
        "placeId": {
          "description": "The place ID of the location that this duplicates.",
          "type": "string"
        },
        "access": {
          "description": "Indicates whether the user has access to the location it duplicates.",
          "enumDescriptions": [
            "Not specified.",
            "Unable to determine whether the user has access to the location that\nit duplicates.",
            "User has access to the location that it duplicates.",
            "User doesn't have access to the location that it duplicates."
          ],
          "type": "string",
          "enum": [
            "ACCESS_UNSPECIFIED",
            "ACCESS_UNKNOWN",
            "ALLOWED",
            "INSUFFICIENT"
          ]
        }
      }
    },
    "PriceList": {
      "id": "PriceList",
      "description": "A list of item price information. Price lists are structured as one or more\nprice lists, each containing one or more sections with one or more items.\nFor example, food price lists may represent breakfast\/lunch\/dinner menus,\nwith sections for burgers\/steak\/seafood.",
      "type": "object",
      "properties": {
        "priceListId": {
          "description": "Required. ID for the price list. Price list, section, and item IDs cannot\nbe duplicated within this Location.",
          "type": "string"
        },
        "labels": {
          "description": "Required. Language-tagged labels for the price list.",
          "type": "array",
          "items": {
            "$ref": "Label"
          }
        },
        "sourceUrl": {
          "description": "Optional source URL of where the price list was retrieved from. For\nexample, this could be the URL of the page that was automatically scraped\nto populate the menu information.",
          "type": "string"
        },
        "sections": {
          "description": "Required. Sections for this price list. Each price list must contain at\nleast one section.",
          "type": "array",
          "items": {
            "$ref": "Section"
          }
        }
      }
    },
    "Label": {
      "id": "Label",
      "description": "Label to be used when displaying the price list, section, or item.",
      "type": "object",
      "properties": {
        "displayName": {
          "description": "Required. Display name for the price list, section, or item.",
          "type": "string"
        },
        "description": {
          "description": "Optional. Description of the price list, section, or item.",
          "type": "string"
        },
        "languageCode": {
          "description": "Optional. The BCP-47 language code that these strings apply for.\nOnly one set of labels may be set per language.",
          "type": "string"
        }
      }
    },
    "Section": {
      "id": "Section",
      "description": "A section of the price list containing one or more items.",
      "type": "object",
      "properties": {
        "sectionId": {
          "description": "Required. ID for the section. Price list, section, and item IDs cannot be\nduplicated within this Location.",
          "type": "string"
        },
        "labels": {
          "description": "Required. Language-tagged labels for the section. We recommend that\nsection names and descriptions be 140 characters or less. At least one\nset of labels is required.",
          "type": "array",
          "items": {
            "$ref": "Label"
          }
        },
        "sectionType": {
          "description": "Optional. Type of the current price list section. Default value is FOOD.",
          "enumDescriptions": [
            "Not specified.",
            "Section contains items that represent food.",
            "Section contains items that represent services."
          ],
          "type": "string",
          "enum": [
            "SECTION_TYPE_UNSPECIFIED",
            "FOOD",
            "SERVICES"
          ]
        },
        "items": {
          "description": "Items that are contained within this section of the price list.",
          "type": "array",
          "items": {
            "$ref": "Item"
          }
        }
      }
    },
    "Item": {
      "id": "Item",
      "description": "A single list item. Each variation of an item in the price list should\nhave its own Item with its own price data.",
      "type": "object",
      "properties": {
        "itemId": {
          "description": "Required. ID for the item. Price list, section, and item IDs cannot be\nduplicated within this Location.",
          "type": "string"
        },
        "labels": {
          "description": "Required. Language-tagged labels for the item. We recommend that\nitem names be 140 characters or less, and descriptions 250 characters\nor less. At least one set of labels is required.",
          "type": "array",
          "items": {
            "$ref": "Label"
          }
        },
        "price": {
          "description": "Optional. Price of the item.",
          "$ref": "Money"
        }
      }
    },
    "Money": {
      "id": "Money",
      "description": "Represents an amount of money with its currency type.",
      "type": "object",
      "properties": {
        "currencyCode": {
          "description": "The 3-letter currency code defined in ISO 4217.",
          "type": "string"
        },
        "units": {
          "description": "The whole units of the amount.\nFor example if `currencyCode` is `\"USD\"`, then 1 unit is one US dollar.",
          "type": "string",
          "format": "int64"
        },
        "nanos": {
          "description": "Number of nano (10^-9) units of the amount.\nThe value must be between -999,999,999 and +999,999,999 inclusive.\nIf `units` is positive, `nanos` must be positive or zero.\nIf `units` is zero, `nanos` can be positive, zero, or negative.\nIf `units` is negative, `nanos` must be negative or zero.\nFor example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "Profile": {
      "id": "Profile",
      "description": "All information pertaining to the location's profile.",
      "type": "object",
      "properties": {
        "description": {
          "description": "Description of the location in your own voice, not editable by anyone else.",
          "type": "string"
        }
      }
    },
    "RelationshipData": {
      "id": "RelationshipData",
      "description": "Information of all parent and children locations related to this one.",
      "type": "object",
      "properties": {
        "parentChain": {
          "description": "The resource name of the Chain that this location is member of.\nHow to find Chain ID",
          "type": "string"
        }
      }
    },
    "SearchGoogleLocationsResponse": {
      "id": "SearchGoogleLocationsResponse",
      "description": "Response message for GoogleLocations.SearchGoogleLocations.",
      "type": "object",
      "properties": {
        "googleLocations": {
          "description": "A collection of GoogleLocations that are potential matches to the specified\nrequest, listed in order from most to least accuracy.",
          "type": "array",
          "items": {
            "$ref": "GoogleLocation"
          }
        }
      }
    },
    "GoogleLocation": {
      "id": "GoogleLocation",
      "description": "Represents a Location that is present on\nGoogle. This can be a location that has been claimed by the user, someone\nelse, or could be unclaimed.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Resource name of this GoogleLocation, in the format\n`googleLocations\/{googleLocationId}`.",
          "type": "string"
        },
        "location": {
          "description": "The sparsely populated Location\ninformation. This field can be re-used in\nCreateLocation if it is\nnot currently claimed by a user.",
          "$ref": "Location"
        },
        "requestAdminRightsUrl": {
          "description": "A URL that will redirect the user to the request admin rights UI.\nThis field is only present if the location has already been claimed by\nany user, including the current user.",
          "type": "string"
        }
      }
    },
    "ListRecommendedGoogleLocationsResponse": {
      "id": "ListRecommendedGoogleLocationsResponse",
      "description": "Response message for GoogleLocations.ListRecommendedGoogleLocations.\n\nIt also contains some locations that have been claimed by other GMB users\nsince the last time they were recommended to this GMB account.",
      "type": "object",
      "properties": {
        "googleLocations": {
          "description": "The locations recommended to a GMB account.\nEach of these represents a GoogleLocation that\nis present on Maps.\nThe locations are sorted in decreasing order of relevance to the GMB\naccount.",
          "type": "array",
          "items": {
            "$ref": "GoogleLocation"
          }
        },
        "totalSize": {
          "description": "The total number of recommended locations for this GMB account,\nirrespective of pagination.",
          "type": "integer",
          "format": "int32"
        },
        "nextPageToken": {
          "description": "During pagination, if there are more locations available to be fetched in\nthe next page, this field is populated with a token to fetch the next page\nof locations in a subsequent call. If there are no more locations to be\nfetched, this field is not present in the response.",
          "type": "string"
        }
      }
    },
    "ReportGoogleLocationRequest": {
      "id": "ReportGoogleLocationRequest",
      "description": "Request message for reporting a GoogleLocation.",
      "type": "object",
      "properties": {
        "locationGroupName": {
          "description": "Optional. The resource name of the location group that this Google Location\nis being reported for, in the format `accounts\/{account_id}`.",
          "type": "string"
        },
        "reportReasonBadLocation": {
          "description": "The reason for which the user is reporting this location when the issue\nis with the location itself.",
          "enumDescriptions": [
            "Not specified.",
            "The recommended location is not an actual location.",
            "The recommended location is permanently closed.",
            "The recommended location does not exist.",
            "The recommended location is spam, fake or offensive.",
            "The recommended location is a private place or home.",
            "The recommended location has moved to a new location.\n\nShould be accompanied by a `report_reason_elaboration` specifying the new\naddress.",
            "The recommended location is a duplicate of another location."
          ],
          "type": "string",
          "enum": [
            "BAD_LOCATION_REASON_UNSPECIFIED",
            "NOT_A_LOCATION",
            "PERMANENTLY_CLOSED",
            "DOES_NOT_EXIST",
            "SPAM",
            "NOT_A_BUSINESS",
            "MOVED",
            "DUPLICATE"
          ]
        },
        "reportReasonBadRecommendation": {
          "description": "The reason for which the user is reporting this location when the issue\nis with the recommendation. This report is useful if the location has\nbeen recommended to the GMB account.",
          "enumDescriptions": [
            "Not specified.",
            "The recommended location is not a store front.",
            "The recommended location doesn't belong to the chain suggested in\nthe `chain_display_name` in the returned location.\n\nShould be accompanied by a `report_reason_elaboration` specifying the\nname of the correct chain.",
            "The recommended location is not relevant to the user.\n\nShould be accompanied by a `report_reason_elaboration` for why the\nrecommendation is irrelevant."
          ],
          "type": "string",
          "enum": [
            "BAD_RECOMMENDATION_REASON_UNSPECIFIED",
            "NOT_A_STORE_FRONT",
            "NOT_PART_OF_SUGGESTED_CHAIN",
            "IRRELEVANT"
          ]
        },
        "reportReasonElaboration": {
          "description": "Optional. A text entry for elaborating on the reason for which the user is\nreporting this location. The maximum length is 512 characters.",
          "type": "string"
        },
        "reportReasonLanguageCode": {
          "description": "Optional. The BCP 47 code of language used in `report_reason_elaboration`.",
          "type": "string"
        }
      }
    },
    "ReportLocationInsightsRequest": {
      "id": "ReportLocationInsightsRequest",
      "description": "Request message for Insights.ReportLocationInsights.",
      "type": "object",
      "properties": {
        "locationNames": {
          "description": "A collection of locations to fetch insights for, specified by their names.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "basicRequest": {
          "description": "A request to include basic metric insights in the report.",
          "$ref": "BasicMetricsRequest"
        },
        "drivingDirectionsRequest": {
          "description": "A request to include insights about driving-direction requests\nin the report.",
          "$ref": "DrivingDirectionMetricsRequest"
        }
      }
    },
    "BasicMetricsRequest": {
      "id": "BasicMetricsRequest",
      "description": "A request for basic metric insights.",
      "type": "object",
      "properties": {
        "metricRequests": {
          "description": "A collection of metrics to return values for including the options for\nhow the data should be returned.",
          "type": "array",
          "items": {
            "$ref": "MetricRequest"
          }
        },
        "timeRange": {
          "description": "The range to gather metrics for. The maximum range is 18 months and\n3 days from the request date for start time and 3 days from the request\ndate for the end time. In some cases, the data may still be missing for\ndays close to the request date. Missing data will be specified in the\n`metricValues` in the response.",
          "$ref": "TimeRange"
        }
      }
    },
    "MetricRequest": {
      "id": "MetricRequest",
      "description": "A request to return values for one metric and the options for how those\nvalues should be returned.",
      "type": "object",
      "properties": {
        "metric": {
          "description": "The requested metric.",
          "enumDescriptions": [
            "No metric specified.",
            "Shorthand to request all available metrics. Which metrics are included in\nALL varies, and depends on the resource for which insights are being\nrequested.",
            "The number of times the resource was shown when searching for the location\ndirectly.",
            "The number of times the resource was shown as a result of a categorical\nsearch (for example, restaurant).",
            "The number of times a resource was shown as a result of a search for the\nchain it belongs to, or a brand it sells. For example, Starbucks, Adidas.\nThis is a subset of QUERIES_INDIRECT.",
            "The number of times the resource was viewed on Google Maps.",
            "The number of times the resource was viewed on Google Search.",
            "The number of times the website was clicked.",
            "The number of times the phone number was clicked.",
            "The number of times driving directions were requested.",
            "The number of views on media items uploaded by the merchant.",
            "The number of views on media items uploaded by customers.",
            "The total number of media items that are currently live that have been\nuploaded by the merchant.",
            "The total number of media items that are currently live that have been\nuploaded by customers.",
            "The number of times the local post was viewed on Google Search.",
            "The number of times the call to action button was clicked on Google."
          ],
          "type": "string",
          "enum": [
            "METRIC_UNSPECIFIED",
            "ALL",
            "QUERIES_DIRECT",
            "QUERIES_INDIRECT",
            "QUERIES_CHAIN",
            "VIEWS_MAPS",
            "VIEWS_SEARCH",
            "ACTIONS_WEBSITE",
            "ACTIONS_PHONE",
            "ACTIONS_DRIVING_DIRECTIONS",
            "PHOTOS_VIEWS_MERCHANT",
            "PHOTOS_VIEWS_CUSTOMERS",
            "PHOTOS_COUNT_MERCHANT",
            "PHOTOS_COUNT_CUSTOMERS",
            "LOCAL_POST_VIEWS_SEARCH",
            "LOCAL_POST_ACTIONS_CALL_TO_ACTION"
          ]
        },
        "options": {
          "description": "How the values should appear when returned.",
          "enumDescriptions": [
            "No metric option specified. Will default to AGGREGATED_TOTAL in a request.",
            "Return values aggregated over the entire time frame.\nThis is the default value.",
            "Return daily timestamped values across time range.",
            "Values will be returned as a breakdown by day of the week.\nOnly valid for ACTIONS_PHONE.",
            "Values will be returned as a breakdown by hour of the day.\nOnly valid for ACTIONS_PHONE."
          ],
          "type": "array",
          "items": {
            "type": "string",
            "enum": [
              "METRIC_OPTION_UNSPECIFIED",
              "AGGREGATED_TOTAL",
              "AGGREGATED_DAILY",
              "BREAKDOWN_DAY_OF_WEEK",
              "BREAKDOWN_HOUR_OF_DAY"
            ]
          }
        }
      }
    },
    "TimeRange": {
      "id": "TimeRange",
      "description": "A range of time. Data will be pulled over the range as a half-open inverval\n(that is, [start_time, end_time)).",
      "type": "object",
      "properties": {
        "startTime": {
          "description": "Epoch timestamp for the start of the range (inclusive).",
          "type": "string",
          "format": "google-datetime"
        },
        "endTime": {
          "description": "Epoch timestamp for the end of the range (exclusive).",
          "type": "string",
          "format": "google-datetime"
        }
      }
    },
    "DrivingDirectionMetricsRequest": {
      "id": "DrivingDirectionMetricsRequest",
      "description": "A request for driving direction insights.",
      "type": "object",
      "properties": {
        "numDays": {
          "description": "The number of days to aggregate data for. Results returned will\nbe available data over the last number of requested days.\nValid values are 7, 30, and 90.",
          "enumDescriptions": [
            "7 days. This is the default value.",
            "30 days.",
            "90 days."
          ],
          "type": "string",
          "enum": [
            "SEVEN",
            "THIRTY",
            "NINETY"
          ]
        },
        "languageCode": {
          "description": "The BCP 47 code for the language. If a language code is not provided,\nit defaults to English.",
          "type": "string"
        }
      }
    },
    "ReportLocationInsightsResponse": {
      "id": "ReportLocationInsightsResponse",
      "description": "Response message for `Insights.ReportLocationInsights`.",
      "type": "object",
      "properties": {
        "locationMetrics": {
          "description": "A collection of metric values by location.",
          "type": "array",
          "items": {
            "$ref": "LocationMetrics"
          }
        },
        "locationDrivingDirectionMetrics": {
          "description": "A collection of values for driving direction-related metrics.",
          "type": "array",
          "items": {
            "$ref": "LocationDrivingDirectionMetrics"
          }
        }
      }
    },
    "LocationMetrics": {
      "id": "LocationMetrics",
      "description": "A series of Metrics and BreakdownMetrics associated with a Location over\nsome time range.",
      "type": "object",
      "properties": {
        "locationName": {
          "description": "The location resource name these values belong to.",
          "type": "string"
        },
        "timeZone": {
          "description": "IANA timezone for the location.",
          "type": "string"
        },
        "metricValues": {
          "description": "A list of values for the requested metrics.",
          "type": "array",
          "items": {
            "$ref": "MetricValue"
          }
        }
      }
    },
    "MetricValue": {
      "id": "MetricValue",
      "description": "A value for a single Metric from a starting time.",
      "type": "object",
      "properties": {
        "metric": {
          "description": "The metric for which the value applies.",
          "enumDescriptions": [
            "No metric specified.",
            "Shorthand to request all available metrics. Which metrics are included in\nALL varies, and depends on the resource for which insights are being\nrequested.",
            "The number of times the resource was shown when searching for the location\ndirectly.",
            "The number of times the resource was shown as a result of a categorical\nsearch (for example, restaurant).",
            "The number of times a resource was shown as a result of a search for the\nchain it belongs to, or a brand it sells. For example, Starbucks, Adidas.\nThis is a subset of QUERIES_INDIRECT.",
            "The number of times the resource was viewed on Google Maps.",
            "The number of times the resource was viewed on Google Search.",
            "The number of times the website was clicked.",
            "The number of times the phone number was clicked.",
            "The number of times driving directions were requested.",
            "The number of views on media items uploaded by the merchant.",
            "The number of views on media items uploaded by customers.",
            "The total number of media items that are currently live that have been\nuploaded by the merchant.",
            "The total number of media items that are currently live that have been\nuploaded by customers.",
            "The number of times the local post was viewed on Google Search.",
            "The number of times the call to action button was clicked on Google."
          ],
          "type": "string",
          "enum": [
            "METRIC_UNSPECIFIED",
            "ALL",
            "QUERIES_DIRECT",
            "QUERIES_INDIRECT",
            "QUERIES_CHAIN",
            "VIEWS_MAPS",
            "VIEWS_SEARCH",
            "ACTIONS_WEBSITE",
            "ACTIONS_PHONE",
            "ACTIONS_DRIVING_DIRECTIONS",
            "PHOTOS_VIEWS_MERCHANT",
            "PHOTOS_VIEWS_CUSTOMERS",
            "PHOTOS_COUNT_MERCHANT",
            "PHOTOS_COUNT_CUSTOMERS",
            "LOCAL_POST_VIEWS_SEARCH",
            "LOCAL_POST_ACTIONS_CALL_TO_ACTION"
          ]
        },
        "totalValue": {
          "description": "The total aggregated value for this metric.\nSet for the AGGREGATED_TOTAL option.",
          "$ref": "DimensionalMetricValue"
        },
        "dimensionalValues": {
          "description": "Dimensional values for this metric.",
          "type": "array",
          "items": {
            "$ref": "DimensionalMetricValue"
          }
        }
      }
    },
    "DimensionalMetricValue": {
      "id": "DimensionalMetricValue",
      "description": "A value for a single metric with a given time dimension.",
      "type": "object",
      "properties": {
        "metricOption": {
          "description": "The option that requested this dimensional value.",
          "enumDescriptions": [
            "No metric option specified. Will default to AGGREGATED_TOTAL in a request.",
            "Return values aggregated over the entire time frame.\nThis is the default value.",
            "Return daily timestamped values across time range.",
            "Values will be returned as a breakdown by day of the week.\nOnly valid for ACTIONS_PHONE.",
            "Values will be returned as a breakdown by hour of the day.\nOnly valid for ACTIONS_PHONE."
          ],
          "type": "string",
          "enum": [
            "METRIC_OPTION_UNSPECIFIED",
            "AGGREGATED_TOTAL",
            "AGGREGATED_DAILY",
            "BREAKDOWN_DAY_OF_WEEK",
            "BREAKDOWN_HOUR_OF_DAY"
          ]
        },
        "timeDimension": {
          "description": "The dimension for the value.",
          "$ref": "TimeDimension"
        },
        "value": {
          "description": "The value. If no value is set, then the requested data is missing.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "TimeDimension": {
      "id": "TimeDimension",
      "description": "The dimension for which data is divided over.",
      "type": "object",
      "properties": {
        "dayOfWeek": {
          "description": "The day of the week (\"MONDAY\" to \"SUNDAY\") this value corresponds to.\nSet for BREAKDOWN_DAY_OF_WEEK option.",
          "enumDescriptions": [
            "The unspecified day-of-week.",
            "The day-of-week of Monday.",
            "The day-of-week of Tuesday.",
            "The day-of-week of Wednesday.",
            "The day-of-week of Thursday.",
            "The day-of-week of Friday.",
            "The day-of-week of Saturday.",
            "The day-of-week of Sunday."
          ],
          "type": "string",
          "enum": [
            "DAY_OF_WEEK_UNSPECIFIED",
            "MONDAY",
            "TUESDAY",
            "WEDNESDAY",
            "THURSDAY",
            "FRIDAY",
            "SATURDAY",
            "SUNDAY"
          ]
        },
        "timeOfDay": {
          "description": "The hour of the day (0 to 23) this value corresponds to.\nSet for BREAKDOWN_HOUR_OF_DAY option.",
          "$ref": "TimeOfDay"
        },
        "timeRange": {
          "description": "The range of time this value covers.\nSet for AGGREGATED_TOTAL and AGGREGATED_DAILY options.",
          "$ref": "TimeRange"
        }
      }
    },
    "TimeOfDay": {
      "id": "TimeOfDay",
      "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 and `google.protobuf.Timestamp`.",
      "type": "object",
      "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.",
          "type": "integer",
          "format": "int32"
        },
        "minutes": {
          "description": "Minutes of hour of day. Must be from 0 to 59.",
          "type": "integer",
          "format": "int32"
        },
        "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.",
          "type": "integer",
          "format": "int32"
        },
        "nanos": {
          "description": "Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999.",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "LocationDrivingDirectionMetrics": {
      "id": "LocationDrivingDirectionMetrics",
      "description": "A location indexed with the regions that people usually come from.\nThis is captured by counting how many driving-direction requests to\nthis location are from each region.",
      "type": "object",
      "properties": {
        "locationName": {
          "description": "The location resource name this metric value belongs to.",
          "type": "string"
        },
        "topDirectionSources": {
          "description": "Driving-direction requests by source region. By convention, these\nare sorted by count with at most 10 results.",
          "type": "array",
          "items": {
            "$ref": "TopDirectionSources"
          }
        },
        "timeZone": {
          "description": "Time zone (IANA timezone IDs, for example, 'Europe\/London') of the\nlocation.",
          "type": "string"
        }
      }
    },
    "TopDirectionSources": {
      "id": "TopDirectionSources",
      "description": "Top regions where driving-direction requests originated from.",
      "type": "object",
      "properties": {
        "dayCount": {
          "description": "The number of days data is aggregated over.",
          "type": "integer",
          "format": "int32"
        },
        "regionCounts": {
          "description": "Regions sorted in descending order by count.",
          "type": "array",
          "items": {
            "$ref": "RegionCount"
          }
        }
      }
    },
    "RegionCount": {
      "id": "RegionCount",
      "description": "A region with its associated request count.",
      "type": "object",
      "properties": {
        "latlng": {
          "description": "Center of region.",
          "$ref": "LatLng"
        },
        "label": {
          "description": "Human-readable label for the region.",
          "type": "string"
        },
        "count": {
          "description": "Number of driving-direction requests from this region.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "ReportLocalPostInsightsRequest": {
      "id": "ReportLocalPostInsightsRequest",
      "description": "Request message for Insights.ReportLocalPostInsights",
      "type": "object",
      "properties": {
        "localPostNames": {
          "description": "Required. The list of posts for which to fetch insights data. All posts\nhave to belong to the location whose name is specified in the `name` field.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "basicRequest": {
          "description": "A request to include basic metric insights in the report. This request\napplies to all posts requested.",
          "$ref": "BasicMetricsRequest"
        }
      }
    },
    "ReportLocalPostInsightsResponse": {
      "id": "ReportLocalPostInsightsResponse",
      "description": "Response message for Insights.ReportLocalPostInsights",
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "localPostMetrics": {
          "description": "One entry per requested post corresponding to this location.",
          "type": "array",
          "items": {
            "$ref": "LocalPostMetrics"
          }
        },
        "timeZone": {
          "description": "Time zone (IANA timezone IDs, eg, 'Europe\/London') of the location.",
          "type": "string"
        }
      }
    },
    "LocalPostMetrics": {
      "id": "LocalPostMetrics",
      "description": "All the metrics requested for a Local Post.",
      "type": "object",
      "properties": {
        "localPostName": {
          "type": "string"
        },
        "metricValues": {
          "description": "A list of values for the requested metrics.",
          "type": "array",
          "items": {
            "$ref": "MetricValue"
          }
        }
      }
    },
    "LocalPost": {
      "id": "LocalPost",
      "description": "Represents a local post for a location.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Output only. Google identifier for this local post in the form:\n `accounts\/{account_id}\/locations\/{location_id}\/localPosts\/{local_post_id}`",
          "type": "string"
        },
        "languageCode": {
          "description": "The language of the local post.",
          "type": "string"
        },
        "summary": {
          "description": "Description\/body of the local post.",
          "type": "string"
        },
        "callToAction": {
          "description": "The URL that users are sent to when clicking through the promotion. Ignored\nfor topic type `OFFER`.",
          "$ref": "CallToAction"
        },
        "createTime": {
          "description": "Output only. Time of the creation of the post.",
          "type": "string",
          "format": "google-datetime"
        },
        "updateTime": {
          "description": "Output only. Time of the last modification of the post made by the user.",
          "type": "string",
          "format": "google-datetime"
        },
        "event": {
          "description": "Event information. Required for topic types `EVENT` and `OFFER`.",
          "$ref": "LocalPostEvent"
        },
        "state": {
          "description": "Output only. The state of the post, indicating what part of its lifecycle\nit is in.",
          "enumDescriptions": [
            "State not specified.",
            "This post was rejected due to content policy violation.",
            "This post is published and is currently appearing in search results.",
            "This post is being processed and is not appearing in search results."
          ],
          "type": "string",
          "enum": [
            "LOCAL_POST_STATE_UNSPECIFIED",
            "REJECTED",
            "LIVE",
            "PROCESSING"
          ]
        },
        "media": {
          "description": "The media associated with the post.",
          "type": "array",
          "items": {
            "$ref": "MediaItem"
          }
        },
        "searchUrl": {
          "description": "Output only. The link to the local post in Google search. This link can\nbe used to share the post via social media, email, text, etc.",
          "type": "string"
        },
        "topicType": {
          "description": "Required.\nThe topic type of the post: standard, event, offer, or product.",
          "enumDescriptions": [
            "No post type is specified.",
            "Post contains basic information, like summary and images.",
            "Post contains basic information and an event.",
            "Post contains basic information, an event and offer related content (e.g.\ncoupon code)",
            "Post contains basic information and product related content (e.g. name,\nprice)."
          ],
          "type": "string",
          "enum": [
            "LOCAL_POST_TOPIC_TYPE_UNSPECIFIED",
            "STANDARD",
            "EVENT",
            "OFFER",
            "PRODUCT"
          ]
        },
        "offer": {
          "description": "Additional data for offer posts. This should only be set when the\ntopic_type is OFFER.",
          "$ref": "LocalPostOffer"
        },
        "product": {
          "description": "Additional data for product posts. This should only be set when the\ntopic_type is PRODUCT.",
          "$ref": "LocalPostProduct"
        }
      }
    },
    "CallToAction": {
      "id": "CallToAction",
      "description": "An action that is performed when the user clicks through the post",
      "type": "object",
      "properties": {
        "actionType": {
          "description": "The type of action that will be performed.",
          "enumDescriptions": [
            "Type unspecified.",
            "This post wants a user to book an appointment\/table\/etc.",
            "This post wants a user to order something.",
            "This post wants a user to browse a product catalog.",
            "This post wants a user to learn more (at their website).",
            "This post wants a user to register\/sign up\/join something.",
            "Deprecated. Use `OFFER` in `LocalPostTopicType` to create a post with\noffer content.",
            "This post wants a user to call the business."
          ],
          "type": "string",
          "enum": [
            "ACTION_TYPE_UNSPECIFIED",
            "BOOK",
            "ORDER",
            "SHOP",
            "LEARN_MORE",
            "SIGN_UP",
            "GET_OFFER",
            "CALL"
          ]
        },
        "url": {
          "description": "The URL the user will be directed to upon clicking. This field should be\nleft unset for Call CTA.",
          "type": "string"
        }
      }
    },
    "LocalPostEvent": {
      "id": "LocalPostEvent",
      "description": "All the information pertaining to an event featured in a local post.",
      "type": "object",
      "properties": {
        "title": {
          "description": "Name of the event.",
          "type": "string"
        },
        "schedule": {
          "description": "Event start and end date\/time.",
          "$ref": "TimeInterval"
        }
      }
    },
    "TimeInterval": {
      "id": "TimeInterval",
      "description": "An interval of time, inclusive. It must contain all fields to be valid.",
      "type": "object",
      "properties": {
        "startDate": {
          "description": "The start date of this period.",
          "$ref": "Date"
        },
        "startTime": {
          "description": "The start time of this period.",
          "$ref": "TimeOfDay"
        },
        "endDate": {
          "description": "The end date of this period.",
          "$ref": "Date"
        },
        "endTime": {
          "description": "The end time of this period.",
          "$ref": "TimeOfDay"
        }
      }
    },
    "MediaItem": {
      "id": "MediaItem",
      "description": "A single media item.",
      "type": "object",
      "properties": {
        "name": {
          "description": "The resource name for this media item.\n`accounts\/{account_id}\/locations\/{location_id}\/media\/{media_key}`",
          "type": "string"
        },
        "sourceUrl": {
          "description": "A publicly accessible URL where the media item can be retrieved\nfrom.\n\nWhen creating one of this or data_ref must be set to specify the\nsource of the media item.\n\nIf `source_url` was used when creating a media item, it will be populated\nwith that source URL when the media item is retrieved.\n\nThis field cannot be updated.",
          "type": "string"
        },
        "dataRef": {
          "description": "Input only. A reference to media item binary data as obtained by the\n`StartUploadMediaItemData` method.\n\nWhen creating a media item, either <code>sourceUrl<\/code> or\n<code>dataRef<\/code> must be set.",
          "$ref": "MediaItemDataRef"
        },
        "mediaFormat": {
          "description": "The format of this media item. Must be set when the media item is created,\nand is read-only on all other requests. Cannot be updated.",
          "enumDescriptions": [
            "Format unspecified.",
            "Media item is a photo. In this version, only photos are supported.",
            "Media item is a video."
          ],
          "type": "string",
          "enum": [
            "MEDIA_FORMAT_UNSPECIFIED",
            "PHOTO",
            "VIDEO"
          ]
        },
        "locationAssociation": {
          "description": "Required when calling `CreatePhoto`. Describes how this media item is\nconnected to its location. Must be either a category (for example,\nEXTERIOR) or the ID of a price list item.\n\nThis is required when adding new media to a location with\n`CreateMediaItem`. For other types of media, for example, photos on local\nposts, this will not be present.",
          "$ref": "LocationAssociation"
        },
        "googleUrl": {
          "description": "Output only. Google-hosted URL for this media item. This URL is not static\nsince it may change over time. For video this will be a preview image with\nan overlaid play icon.",
          "type": "string"
        },
        "thumbnailUrl": {
          "description": "Output only. Where provided, the URL of a thumbnail image for this media\nitem.",
          "type": "string"
        },
        "createTime": {
          "description": "Output only. Creation time of this media item.",
          "type": "string",
          "format": "google-datetime"
        },
        "dimensions": {
          "description": "Output only. The dimensions (width and height) in pixels.",
          "$ref": "Dimensions"
        },
        "insights": {
          "description": "Output only. Statistics for this media item.",
          "$ref": "MediaInsights"
        },
        "attribution": {
          "description": "Output only. Attribution information for customer media items. You must\ndisplay this attribution as provided to your users and must not delete or\nalter the attribution.",
          "$ref": "Attribution"
        },
        "description": {
          "description": "Description for this media item. Descriptions cannot be modified through\nthe My Business API, but can be set when creating a new media item that is\nnot a cover photo.",
          "type": "string"
        }
      }
    },
    "MediaItemDataRef": {
      "id": "MediaItemDataRef",
      "description": "Reference to the photo binary data of a `MediaItem` uploaded through the My\nBusiness API.\n\nCreate a data ref using StartUploadMediaItemData, and use this ref\nwhen uploading bytes to [UpdateMedia] and subsequently calling\nCreateMediaItem.",
      "type": "object",
      "properties": {
        "resourceName": {
          "description": "The unique ID for this media item's binary data.\nUsed to upload the photo data with [UpdateMedia] and when\ncreating a new media item from those bytes with CreateMediaItem.\n\nExample of uploading bytes:\n`curl -X POST -T{path_to_file}\n\"http:\/\/mybusiness.googleapis.com\/upload\/v1\/media\/{resource_name}?upload_type=media\"`\n\nFor CreateMediaItem\ncalls, set this as the `MediaItem` `data_ref`.",
          "type": "string"
        }
      }
    },
    "LocationAssociation": {
      "id": "LocationAssociation",
      "description": "How the media item is associated with its location.",
      "type": "object",
      "properties": {
        "category": {
          "description": "The category that this location photo belongs to.",
          "enumDescriptions": [
            "Unspecified category.",
            "Cover photo. A location has only one cover photo.",
            "Profile photo. A location has only one profile photo.",
            "Logo photo.",
            "Exterior media.",
            "Interior media.",
            "Product media.",
            "'At-work' media.",
            "Food and drink media.",
            "Menu media.",
            "Common area media.",
            "Rooms media.",
            "Teams media.",
            "Additional, uncategorized media."
          ],
          "type": "string",
          "enum": [
            "CATEGORY_UNSPECIFIED",
            "COVER",
            "PROFILE",
            "LOGO",
            "EXTERIOR",
            "INTERIOR",
            "PRODUCT",
            "AT_WORK",
            "FOOD_AND_DRINK",
            "MENU",
            "COMMON_AREA",
            "ROOMS",
            "TEAMS",
            "ADDITIONAL"
          ]
        },
        "priceListItemId": {
          "description": "The ID of a price list item that this location photo is associated\nwith.",
          "type": "string"
        }
      }
    },
    "Dimensions": {
      "id": "Dimensions",
      "description": "Dimensions of the media item.",
      "type": "object",
      "properties": {
        "widthPixels": {
          "description": "Width of the media item, in pixels.",
          "type": "integer",
          "format": "int32"
        },
        "heightPixels": {
          "description": "Height of the media item, in pixels.",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "MediaInsights": {
      "id": "MediaInsights",
      "description": "Insights and statistics for the media item.",
      "type": "object",
      "properties": {
        "viewCount": {
          "description": "Output only. The number of times the media item has been viewed.",
          "type": "string",
          "format": "int64"
        }
      }
    },
    "Attribution": {
      "id": "Attribution",
      "description": "Attribution information for customer media items, such as the contributor's\nname and profile picture.",
      "type": "object",
      "properties": {
        "profileName": {
          "description": "The user name to attribute the media item to.",
          "type": "string"
        },
        "profilePhotoUrl": {
          "description": "URL of the attributed user's profile photo thumbnail.",
          "type": "string"
        },
        "takedownUrl": {
          "description": "The URL of the takedown page, where the media item can be reported if it\nis inappropriate.",
          "type": "string"
        },
        "profileUrl": {
          "description": "The URL of the attributed user's Google Maps profile page.",
          "type": "string"
        }
      }
    },
    "LocalPostOffer": {
      "id": "LocalPostOffer",
      "description": "Specific fields for offer posts.",
      "type": "object",
      "properties": {
        "couponCode": {
          "description": "Optional. Offer code that is usable in store or online.",
          "type": "string"
        },
        "redeemOnlineUrl": {
          "description": "Optional. Online link to redeem offer.",
          "type": "string"
        },
        "termsConditions": {
          "description": "Optional. Offer terms and conditions.",
          "type": "string"
        }
      }
    },
    "LocalPostProduct": {
      "id": "LocalPostProduct",
      "description": "Specific fields for product posts.",
      "type": "object",
      "properties": {
        "productName": {
          "description": "Name of the product.",
          "type": "string"
        },
        "lowerPrice": {
          "description": "Lower price of the product if the product has a price range, or the price\nfor the product.",
          "$ref": "Money"
        },
        "upperPrice": {
          "description": "Upper price of the product. In case price is not a range, lower_price is\nequal to upper_price.",
          "$ref": "Money"
        }
      }
    },
    "ListLocalPostsResponse": {
      "id": "ListLocalPostsResponse",
      "description": "Response message for ListLocalPosts",
      "type": "object",
      "properties": {
        "localPosts": {
          "description": "The returned list of local posts.",
          "type": "array",
          "items": {
            "$ref": "LocalPost"
          }
        },
        "nextPageToken": {
          "description": "If there are more local posts than the requested page size, then this field\nis populated with a token to fetch the next page of local posts on a\nsubsequent call to `ListLocalPosts`.",
          "type": "string"
        }
      }
    },
    "ListLocationsResponse": {
      "id": "ListLocationsResponse",
      "description": "Response message for MyBusiness.ListLocations.",
      "type": "object",
      "properties": {
        "locations": {
          "description": "The locations.",
          "type": "array",
          "items": {
            "$ref": "Location"
          }
        },
        "nextPageToken": {
          "description": "If the number of locations exceeded the requested page size, this field\nis populated with a token to fetch the next page of locations on a\nsubsequent call to `ListLocations`. If there are no more locations, this\nfield is not present in the response.",
          "type": "string"
        },
        "totalSize": {
          "description": "The approximate number of Locations in the list irrespective of pagination.",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "BatchGetLocationsRequest": {
      "id": "BatchGetLocationsRequest",
      "description": "Request message for MyBusiness.BatchGetLocations.",
      "type": "object",
      "properties": {
        "locationNames": {
          "description": "A collection of locations to fetch, specified by their names.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "BatchGetLocationsResponse": {
      "id": "BatchGetLocationsResponse",
      "description": "Response message for MyBusiness.BatchGetLocations.",
      "type": "object",
      "properties": {
        "locations": {
          "description": "A collection of locations.",
          "type": "array",
          "items": {
            "$ref": "Location"
          }
        }
      }
    },
    "GoogleUpdatedLocation": {
      "id": "GoogleUpdatedLocation",
      "description": "Represents a location that was modified by Google.",
      "type": "object",
      "properties": {
        "location": {
          "description": "The Google-updated version of this location.",
          "$ref": "Location"
        },
        "diffMask": {
          "description": "The fields that Google updated.",
          "type": "string",
          "format": "google-fieldmask"
        }
      }
    },
    "FindMatchingLocationsRequest": {
      "id": "FindMatchingLocationsRequest",
      "description": "Request message for MyBusiness.FindMatchingLocations.",
      "type": "object",
      "properties": {
        "languageCode": {
          "description": "The preferred language for the matching location (in BCP-47 format).",
          "type": "string"
        },
        "numResults": {
          "description": "The number of matches to return. The default value is 3, with a maximum\nof 10. Note that latency may increase if more are requested. There is no\npagination.",
          "type": "integer",
          "format": "int32"
        },
        "maxCacheDuration": {
          "description": "Deprecated. This field is ignored for all requests.",
          "type": "string",
          "format": "google-duration"
        }
      }
    },
    "FindMatchingLocationsResponse": {
      "id": "FindMatchingLocationsResponse",
      "description": "Response message for MyBusiness.FindMatchingLocations.",
      "type": "object",
      "properties": {
        "matchedLocations": {
          "description": "A collection of locations that are potential matches to the specified\nlocation, listed in order from best to least match. If there is an exact\nmatch, it will be in the first position.",
          "type": "array",
          "items": {
            "$ref": "MatchedLocation"
          }
        },
        "matchTime": {
          "description": "When the matching algorithm was last executed for this location.",
          "type": "string",
          "format": "google-datetime"
        }
      }
    },
    "MatchedLocation": {
      "id": "MatchedLocation",
      "description": "Represents a possible match to a location.",
      "type": "object",
      "properties": {
        "location": {
          "description": "The sparsely populated location that is a potential match. Unpopulated\nfields include, but may not be limited to:\nname (the matched location cannot be retrieved via `GetLocation` nor\n`BatchGetLocations`); `store_code`; `service_area` coverage area details;\n`labels`; `ad_words_location_extensions`; `photos`",
          "$ref": "Location"
        },
        "isExactMatch": {
          "description": "Is this an exact match?",
          "type": "boolean"
        }
      }
    },
    "AssociateLocationRequest": {
      "id": "AssociateLocationRequest",
      "description": "Request message for MyBusiness.AssociateLocationRequest.",
      "type": "object",
      "properties": {
        "placeId": {
          "description": "The association to establish. If not set, it indicates no match.",
          "type": "string"
        }
      }
    },
    "ClearLocationAssociationRequest": {
      "id": "ClearLocationAssociationRequest",
      "description": "Request message for MyBusiness.ClearLocationAssociationRequest.",
      "type": "object",
      "properties": {
      }
    },
    "Chain": {
      "id": "Chain",
      "description": "A chain is a brand that your business's locations can be affiliated with.",
      "type": "object",
      "properties": {
        "name": {
          "description": "The chain's resource name, in the format `chains\/{chain_place_id}`.",
          "type": "string"
        },
        "chainNames": {
          "description": "Names of the chain.",
          "type": "array",
          "items": {
            "$ref": "ChainName"
          }
        },
        "websites": {
          "description": "Websites of the chain.",
          "type": "array",
          "items": {
            "$ref": "ChainUrl"
          }
        },
        "locationCount": {
          "description": "Number of locations that are part of this chain.",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "ChainName": {
      "id": "ChainName",
      "description": "Name to be used when displaying the chain.",
      "type": "object",
      "properties": {
        "displayName": {
          "description": "The display name for this chain.",
          "type": "string"
        },
        "languageCode": {
          "description": "The BCP 47 code of language of the name.",
          "type": "string"
        }
      }
    },
    "ChainUrl": {
      "id": "ChainUrl",
      "description": "Url to be used when displaying the chain.",
      "type": "object",
      "properties": {
        "url": {
          "description": "The url for this chain.",
          "type": "string"
        }
      }
    },
    "SearchChainsResponse": {
      "id": "SearchChainsResponse",
      "description": "Response message for MyBusiness.SearchChains.",
      "type": "object",
      "properties": {
        "chains": {
          "description": "Chains that match the queried chain_display_name in SearchChainsRequest.\nIf there are no matches, this field will be empty.\nResults are listed in order of relevance.",
          "type": "array",
          "items": {
            "$ref": "Chain"
          }
        }
      }
    },
    "TransferLocationRequest": {
      "id": "TransferLocationRequest",
      "description": "Request message for MyBusiness.TransferLocation.",
      "type": "object",
      "properties": {
        "toAccount": {
          "description": "Name of the account resource to transfer the location to (for example,\n\"accounts\/8675309\").",
          "type": "string"
        }
      }
    },
    "ListAttributeMetadataResponse": {
      "id": "ListAttributeMetadataResponse",
      "description": "Response message for MyBusiness.ListAttributeMetadata.",
      "type": "object",
      "properties": {
        "attributes": {
          "description": "A collection of attribute metadata for the available attributes.",
          "type": "array",
          "items": {
            "$ref": "AttributeMetadata"
          }
        },
        "nextPageToken": {
          "description": "If the number of attributes exceeded the requested page size, this field\nwill be populated with a token to fetch the next page of attributes on a\nsubsequent call to `attributes.list`. If there are no more attributes, this\nfield will not be present in the response.",
          "type": "string"
        }
      }
    },
    "AttributeMetadata": {
      "id": "AttributeMetadata",
      "description": "Metadata for an attribute. Contains display information for the attribute,\nincluding a localized name and a heading for grouping related attributes\ntogether.",
      "type": "object",
      "properties": {
        "attributeId": {
          "description": "The ID of the attribute.",
          "type": "string"
        },
        "valueType": {
          "description": "The value type for the attribute. Values set and retrieved should be\nexpected to be of this type.",
          "enumDescriptions": [
            "Not specified.",
            "The values for this attribute are boolean values.",
            "The attribute has a predetermined list of available values that can be\nused. Metadata for this attribute will list these values.",
            "The values for this attribute are URLs.",
            "The attribute value is an enum with multiple possible values that can be\nexplicitly set or unset."
          ],
          "type": "string",
          "enum": [
            "ATTRIBUTE_VALUE_TYPE_UNSPECIFIED",
            "BOOL",
            "ENUM",
            "URL",
            "REPEATED_ENUM"
          ]
        },
        "displayName": {
          "description": "The localized display name for the attribute, if available; otherwise,\nthe English display name.",
          "type": "string"
        },
        "groupDisplayName": {
          "description": "The localized display name of the group that contains this attribute, if\navailable; otherwise, the English group name. Related attributes are\ncollected into a group and should be displayed together under the heading\ngiven here.",
          "type": "string"
        },
        "isRepeatable": {
          "description": "If true, the attribute supports multiple values. If false, only a single\nvalue should be provided.",
          "type": "boolean"
        },
        "valueMetadata": {
          "description": "For some types of attributes (for example, enums), a list of supported\nvalues and corresponding display names for those values is provided.",
          "type": "array",
          "items": {
            "$ref": "AttributeValueMetadata"
          }
        },
        "isDeprecated": {
          "description": "If true, the attribute is deprecated and should no longer be used. If\ndeprecated, updating this attribute will not result in an error, but\nupdates will not be saved. At some point after being deprecated, the\nattribute will be removed entirely and it will become an error.",
          "type": "boolean"
        }
      }
    },
    "AttributeValueMetadata": {
      "id": "AttributeValueMetadata",
      "description": "Metadata for supported attribute values.",
      "type": "object",
      "properties": {
        "value": {
          "description": "The attribute value.",
          "type": "any"
        },
        "displayName": {
          "description": "The display name for this value, localized where available; otherwise, in\nEnglish. The value display name is intended to be used in context with\nthe attribute display name.\n\nFor example, for a \"WiFi\" enum attribute, this could contain \"Paid\" to\nrepresent paid Wi-Fi.",
          "type": "string"
        }
      }
    },
    "ListMediaItemsResponse": {
      "id": "ListMediaItemsResponse",
      "description": "Response message for Media.ListMediaItems.",
      "type": "object",
      "properties": {
        "mediaItems": {
          "description": "The returned list of media items.",
          "type": "array",
          "items": {
            "$ref": "MediaItem"
          }
        },
        "totalMediaItemCount": {
          "description": "The total number of media items for this location, irrespective of\npagination.",
          "type": "integer",
          "format": "int32"
        },
        "nextPageToken": {
          "description": "If there are more media items than the requested page size, then this field\nis populated with a token to fetch the next page of media items on a\nsubsequent call to ListMediaItems.",
          "type": "string"
        }
      }
    },
    "ListCustomerMediaItemsResponse": {
      "id": "ListCustomerMediaItemsResponse",
      "description": "Response message for Media.ListCustomerMediaItems.",
      "type": "object",
      "properties": {
        "mediaItems": {
          "description": "The returned list of media items.",
          "type": "array",
          "items": {
            "$ref": "MediaItem"
          }
        },
        "totalMediaItemCount": {
          "description": "The total number of media items for this location, irrespective of\npagination. This number is approximate, particularly when there are\nmultiple pages of results.",
          "type": "integer",
          "format": "int32"
        },
        "nextPageToken": {
          "description": "If there are more media items than the requested page size, then this field\nis populated with a token to fetch the next page of media items on a\nsubsequent call to ListCustomerMediaItems.",
          "type": "string"
        }
      }
    },
    "StartUploadMediaItemDataRequest": {
      "id": "StartUploadMediaItemDataRequest",
      "description": "Request message for Media.StartUploadMediaItemData.",
      "type": "object",
      "properties": {
      }
    },
    "ListQuestionsResponse": {
      "id": "ListQuestionsResponse",
      "description": "Response message for QuestionsAndAnswers.ListQuestions",
      "type": "object",
      "properties": {
        "questions": {
          "description": "The requested questions,",
          "type": "array",
          "items": {
            "$ref": "Question"
          }
        },
        "totalSize": {
          "description": "The total number of questions posted for this location across all pages.",
          "type": "integer",
          "format": "int32"
        },
        "nextPageToken": {
          "description": "If the number of questions exceeds the requested max page size, this field\nis populated with a token to fetch the next page of questions on a\nsubsequent call. If there are no more questions, this field is not present\nin the response.",
          "type": "string"
        }
      }
    },
    "Question": {
      "id": "Question",
      "description": "Represents a single question and some of its answers.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Output only. The unique name for the question.\naccounts\/*\/locations\/*\/questions\/*",
          "type": "string"
        },
        "author": {
          "description": "Output only. The author of the question.",
          "$ref": "Author"
        },
        "upvoteCount": {
          "description": "Output only. The number of upvotes for the question.",
          "type": "integer",
          "format": "int32"
        },
        "text": {
          "description": "The text of the question. It should contain at least two words and the\ntotal length should be greater than or equal to 10 characters. The maximum\nlength is 4096 characters.",
          "type": "string"
        },
        "createTime": {
          "description": "Output only. The timestamp for when the question was written.",
          "type": "string",
          "format": "google-datetime"
        },
        "updateTime": {
          "description": "Output only. The timestamp for when the question was last modified.",
          "type": "string",
          "format": "google-datetime"
        },
        "topAnswers": {
          "description": "Output only. A list of answers to the question, sorted by upvotes. This\nmay not be a complete list of answers depending on the request parameters\n(answers_per_question)",
          "type": "array",
          "items": {
            "$ref": "Answer"
          }
        },
        "totalAnswerCount": {
          "description": "Output only. The total number of answers posted for this question.",
          "type": "integer",
          "format": "int32"
        }
      }
    },
    "Author": {
      "id": "Author",
      "description": "Represents the author of a question or answer",
      "type": "object",
      "properties": {
        "displayName": {
          "description": "The display name of the user",
          "type": "string"
        },
        "profilePhotoUrl": {
          "description": "The profile photo URL of the user.",
          "type": "string"
        },
        "type": {
          "description": "The type of user the author is.",
          "enumDescriptions": [
            "This should not be used.",
            "A regular user.",
            "A Local Guide",
            "The owner\/manager of the location"
          ],
          "type": "string",
          "enum": [
            "AUTHOR_TYPE_UNSPECIFIED",
            "REGULAR_USER",
            "LOCAL_GUIDE",
            "MERCHANT"
          ]
        }
      }
    },
    "Answer": {
      "id": "Answer",
      "description": "Represents an answer to a question",
      "type": "object",
      "properties": {
        "name": {
          "description": "Output only. The unique name for the answer\naccounts\/*\/locations\/*\/questions\/*\/answers\/*",
          "type": "string"
        },
        "author": {
          "description": "Output only. The author of the answer.",
          "$ref": "Author"
        },
        "upvoteCount": {
          "description": "Output only. The number of upvotes for the answer.",
          "type": "integer",
          "format": "int32"
        },
        "text": {
          "description": "The text of the answer. It should contain at least one non-whitespace\ncharacter. The maximum length is 4096 characters.",
          "type": "string"
        },
        "createTime": {
          "description": "Output only. The timestamp for when the answer was written.",
          "type": "string",
          "format": "google-datetime"
        },
        "updateTime": {
          "description": "Output only. The timestamp for when the answer was last modified.",
          "type": "string",
          "format": "google-datetime"
        }
      }
    },
    "ListAnswersResponse": {
      "id": "ListAnswersResponse",
      "description": "Response message for QuestionsAndAnswers.ListAnswers",
      "type": "object",
      "properties": {
        "answers": {
          "description": "The requested answers.",
          "type": "array",
          "items": {
            "$ref": "Answer"
          }
        },
        "totalSize": {
          "description": "The total number of answers posted for this question across all pages.",
          "type": "integer",
          "format": "int32"
        },
        "nextPageToken": {
          "description": "If the number of answers exceeds the requested max page size, this field\nis populated with a token to fetch the next page of answers on a subsequent\ncall. If there are no more answers, this field is not present in the\nresponse.",
          "type": "string"
        }
      }
    },
    "UpsertAnswerRequest": {
      "id": "UpsertAnswerRequest",
      "description": "Request message for QuestionsAndAnswers.UpsertAnswer",
      "type": "object",
      "properties": {
        "answer": {
          "description": "The new answer.",
          "$ref": "Answer"
        }
      }
    },
    "BatchGetReviewsRequest": {
      "id": "BatchGetReviewsRequest",
      "description": "Request message for MyBusiness.BatchGetReviews.",
      "type": "object",
      "properties": {
        "locationNames": {
          "description": "A collection of locations to fetch reviews for, specified by their names.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "pageSize": {
          "description": "How many reviews to fetch per page. The default value is 200.",
          "type": "integer",
          "format": "int32"
        },
        "pageToken": {
          "description": "If specified, it fetches the next page of reviews.",
          "type": "string"
        },
        "orderBy": {
          "description": "Optional.\nSpecifies the field to sort reviews by.\nIf unspecified, the order of reviews returned will\ndefault to `update_time desc`.\nValid orders to sort by are `rating`, `rating desc` and `update_time desc`.\n`rating` will return reviews in ascending order.\n`update_time`(i.e. ascending order) is not supported.",
          "type": "string"
        },
        "ignoreRatingOnlyReviews": {
          "description": "Whether to ignore rating-only reviews.",
          "type": "boolean"
        }
      }
    },
    "BatchGetReviewsResponse": {
      "id": "BatchGetReviewsResponse",
      "description": "Response message for MyBusiness.BatchGetReviews.",
      "type": "object",
      "properties": {
        "locationReviews": {
          "description": "Reviews with location information.",
          "type": "array",
          "items": {
            "$ref": "LocationReview"
          }
        },
        "nextPageToken": {
          "description": "If the number of reviews exceeded the requested page size, this field\nis populated with a token to fetch the next page of reviews on a subsequent\ncalls. If there are no more reviews, this field will not be present in the\nresponse.",
          "type": "string"
        }
      }
    },
    "LocationReview": {
      "id": "LocationReview",
      "description": "Represents a review with location information.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Location resource name.",
          "type": "string"
        },
        "review": {
          "description": "A review for the location.",
          "$ref": "Review"
        }
      }
    },
    "Review": {
      "id": "Review",
      "description": "Output only. Represents a review for a location.",
      "type": "object",
      "properties": {
        "name": {
          "description": "The resource name. For Review it is of the form\n`accounts\/{account_id}\/locations\/{location_id}\/reviews\/{review_id}`",
          "type": "string"
        },
        "reviewId": {
          "description": "The encrypted unique identifier.",
          "type": "string"
        },
        "reviewer": {
          "description": "The author of the review.",
          "$ref": "Reviewer"
        },
        "starRating": {
          "description": "The star rating of the review.",
          "enumDescriptions": [
            "Not specified.",
            "One star out of a maximum of five.",
            "Two stars out of a maximum of five.",
            "Three stars out of a maximum of five.",
            "Four stars out of a maximum of five.",
            "The maximum star rating."
          ],
          "type": "string",
          "enum": [
            "STAR_RATING_UNSPECIFIED",
            "ONE",
            "TWO",
            "THREE",
            "FOUR",
            "FIVE"
          ]
        },
        "comment": {
          "description": "The body of the review as plain text with markups.",
          "type": "string"
        },
        "createTime": {
          "description": "The timestamp for when the review was written.",
          "type": "string",
          "format": "google-datetime"
        },
        "updateTime": {
          "description": "The timestamp for when the review was last modified.",
          "type": "string",
          "format": "google-datetime"
        },
        "reviewReply": {
          "description": "The owner\/manager of this location's reply to this review.",
          "$ref": "ReviewReply"
        }
      }
    },
    "Reviewer": {
      "id": "Reviewer",
      "description": "Represents the author of the review.",
      "type": "object",
      "properties": {
        "profilePhotoUrl": {
          "description": "The profile photo link of the reviewer.\nOnly populated if `is_anonymous` is false.",
          "type": "string"
        },
        "displayName": {
          "description": "The name of the reviewer.\nOnly populated with the reviewer's real name if `is_anonymous` is false.",
          "type": "string"
        },
        "isAnonymous": {
          "description": "Indicates whether the reviewer has opted to remain anonymous.",
          "type": "boolean"
        }
      }
    },
    "ReviewReply": {
      "id": "ReviewReply",
      "description": "Represents the location owner\/manager's reply to a review.",
      "type": "object",
      "properties": {
        "comment": {
          "description": "The body of the reply as plain text with markups.\nThe maximum length is 4096 bytes.",
          "type": "string"
        },
        "updateTime": {
          "description": "Output only. The timestamp for when the reply was last modified.",
          "type": "string",
          "format": "google-datetime"
        }
      }
    },
    "ListReviewsResponse": {
      "id": "ListReviewsResponse",
      "description": "Response message for MyBusiness.ListReviews.",
      "type": "object",
      "properties": {
        "reviews": {
          "description": "The reviews.",
          "type": "array",
          "items": {
            "$ref": "Review"
          }
        },
        "averageRating": {
          "description": "The average star rating of all reviews for this location\non a scale of 1 to 5, where 5 is the highest rating.",
          "type": "number",
          "format": "double"
        },
        "totalReviewCount": {
          "description": "The total number of reviews for this location.",
          "type": "integer",
          "format": "int32"
        },
        "nextPageToken": {
          "description": "If the number of reviews exceeded the requested page size, this field\nis populated with a token to fetch the next page of reviews on a\nsubsequent call to ListReviews. If there are no more reviews, this\nfield is not present in the response.",
          "type": "string"
        }
      }
    },
    "CompleteVerificationRequest": {
      "id": "CompleteVerificationRequest",
      "description": "Request message for Verifications.CompleteVerificationAction.",
      "type": "object",
      "properties": {
        "pin": {
          "description": "PIN code received by the merchant to complete the verification.",
          "type": "string"
        }
      }
    },
    "CompleteVerificationResponse": {
      "id": "CompleteVerificationResponse",
      "description": "Response message for Verifications.CompleteVerificationAction.",
      "type": "object",
      "properties": {
        "verification": {
          "description": "The completed verification.",
          "$ref": "Verification"
        }
      }
    },
    "Verification": {
      "id": "Verification",
      "description": "A verification represents a verification attempt on a location.",
      "type": "object",
      "properties": {
        "name": {
          "description": "Resource name of the verification.",
          "type": "string"
        },
        "method": {
          "description": "The method of the verification.",
          "enumDescriptions": [
            "Default value, will result in errors.",
            "Send a postcard with a verification PIN to a specific mailing address.\nThe PIN is used to complete verification with Google.",
            "Send an email with a verification PIN to a specific email address.\nThe PIN is used to complete verification with Google.",
            "Make a phone call with a verification PIN to a specific phone number.\nThe PIN is used to complete verification with Google.",
            "Send an SMS with a verification PIN to a specific phone number.\nThe PIN is used to complete verification with Google.",
            "Verify the location without additional user action. This option may not be\navailable for all locations."
          ],
          "type": "string",
          "enum": [
            "VERIFICATION_METHOD_UNSPECIFIED",
            "ADDRESS",
            "EMAIL",
            "PHONE_CALL",
            "SMS",
            "AUTO"
          ]
        },
        "state": {
          "description": "The state of the verification.",
          "enumDescriptions": [
            "Default value, will result in errors.",
            "The verification is pending.",
            "The verification is completed.",
            "The verification is failed."
          ],
          "type": "string",
          "enum": [
            "VERIFICATION_STATE_UNSPECIFIED",
            "PENDING",
            "COMPLETED",
            "FAILED"
          ]
        },
        "createTime": {
          "description": "The timestamp when the verification is requested.",
          "type": "string",
          "format": "google-datetime"
        }
      }
    },
    "ListVerificationsResponse": {
      "id": "ListVerificationsResponse",
      "description": "Response message for Verifications.ListVerifications.",
      "type": "object",
      "properties": {
        "verifications": {
          "description": "List of the verifications.",
          "type": "array",
          "items": {
            "$ref": "Verification"
          }
        },
        "nextPageToken": {
          "description": "If the number of verifications exceeded the requested page size, this field\nwill be populated with a token to fetch the next page of verification on a\nsubsequent call. If there are no more attributes, this field will not be\npresent in the response.",
          "type": "string"
        }
      }
    },
    "FetchVerificationOptionsRequest": {
      "id": "FetchVerificationOptionsRequest",
      "description": "Request message for Verifications.FetchVerificationOptions.",
      "type": "object",
      "properties": {
        "languageCode": {
          "description": "The BCP 47 language code representing the language that is to be used for\nthe verification process. Available options vary by language.",
          "type": "string"
        },
        "context": {
          "description": "Extra context information for the verification of service businesses.\nRequired for the locations whose business type is CUSTOMER_LOCATION_ONLY.\nINVALID_ARGUMENT will be thrown if it is set for other business types of\nlocations.",
          "$ref": "ServiceBusinessContext"
        }
      }
    },
    "ServiceBusinessContext": {
      "id": "ServiceBusinessContext",
      "description": "Additional data for service business verification.",
      "type": "object",
      "properties": {
        "address": {
          "description": "The verification address of the location. It is used to either enable more\nverification options or send a postcard.",
          "$ref": "PostalAddress"
        }
      }
    },
    "FetchVerificationOptionsResponse": {
      "id": "FetchVerificationOptionsResponse",
      "description": "Response message for Verifications.FetchVerificationOptions.",
      "type": "object",
      "properties": {
        "options": {
          "description": "The available verification options.",
          "type": "array",
          "items": {
            "$ref": "VerificationOption"
          }
        }
      }
    },
    "VerificationOption": {
      "id": "VerificationOption",
      "description": "The verification option represents how to verify the location (indicated by\nverification method) and where the verification will be sent to (indicated by\ndisplay data).",
      "type": "object",
      "properties": {
        "verificationMethod": {
          "description": "Method to verify the location.",
          "enumDescriptions": [
            "Default value, will result in errors.",
            "Send a postcard with a verification PIN to a specific mailing address.\nThe PIN is used to complete verification with Google.",
            "Send an email with a verification PIN to a specific email address.\nThe PIN is used to complete verification with Google.",
            "Make a phone call with a verification PIN to a specific phone number.\nThe PIN is used to complete verification with Google.",
            "Send an SMS with a verification PIN to a specific phone number.\nThe PIN is used to complete verification with Google.",
            "Verify the location without additional user action. This option may not be\navailable for all locations."
          ],
          "type": "string",
          "enum": [
            "VERIFICATION_METHOD_UNSPECIFIED",
            "ADDRESS",
            "EMAIL",
            "PHONE_CALL",
            "SMS",
            "AUTO"
          ]
        },
        "phoneData": {
          "description": "Set only if the method is PHONE_CALL or SMS.",
          "$ref": "PhoneVerificationData"
        },
        "addressData": {
          "description": "Set only if the method is MAIL.",
          "$ref": "AddressVerificationData"
        },
        "emailData": {
          "description": "Set only if the method is EMAIL.",
          "$ref": "EmailVerificationData"
        }
      }
    },
    "PhoneVerificationData": {
      "id": "PhoneVerificationData",
      "description": "Display Data for verifications through phone, e.g. phone call, sms.",
      "type": "object",
      "properties": {
        "phoneNumber": {
          "description": "Phone number that the PIN will be sent to.",
          "type": "string"
        }
      }
    },
    "AddressVerificationData": {
      "id": "AddressVerificationData",
      "description": "Display data for verifications through postcard.",
      "type": "object",
      "properties": {
        "businessName": {
          "description": "Merchant's business name.",
          "type": "string"
        },
        "address": {
          "description": "Address that a postcard can be sent to.",
          "$ref": "PostalAddress"
        }
      }
    },
    "EmailVerificationData": {
      "id": "EmailVerificationData",
      "description": "Display data for verifications through email.",
      "type": "object",
      "properties": {
        "domainName": {
          "description": "Domain name in the email address. e.g. \"gmail.com\" in foo@gmail.com",
          "type": "string"
        },
        "userName": {
          "description": "User name in the email address. e.g. \"foo\" in foo@gmail.com",
          "type": "string"
        },
        "isUserNameEditable": {
          "description": "Whether client is allowed to provide a different user name.",
          "type": "boolean"
        }
      }
    },
    "VerifyLocationRequest": {
      "id": "VerifyLocationRequest",
      "description": "Request message for MyBusiness.VerifyLocation.",
      "type": "object",
      "properties": {
        "method": {
          "description": "Verification method.",
          "enumDescriptions": [
            "Default value, will result in errors.",
            "Send a postcard with a verification PIN to a specific mailing address.\nThe PIN is used to complete verification with Google.",
            "Send an email with a verification PIN to a specific email address.\nThe PIN is used to complete verification with Google.",
            "Make a phone call with a verification PIN to a specific phone number.\nThe PIN is used to complete verification with Google.",
            "Send an SMS with a verification PIN to a specific phone number.\nThe PIN is used to complete verification with Google.",
            "Verify the location without additional user action. This option may not be\navailable for all locations."
          ],
          "type": "string",
          "enum": [
            "VERIFICATION_METHOD_UNSPECIFIED",
            "ADDRESS",
            "EMAIL",
            "PHONE_CALL",
            "SMS",
            "AUTO"
          ]
        },
        "languageCode": {
          "description": "The BCP 47 language code representing the language that is to be used for\nthe verification process.",
          "type": "string"
        },
        "emailInput": {
          "description": "The input for EMAIL method.",
          "$ref": "EmailInput"
        },
        "addressInput": {
          "description": "The input for ADDRESS method.",
          "$ref": "AddressInput"
        },
        "phoneInput": {
          "description": "The input for PHONE_CALL\/SMS method",
          "$ref": "PhoneInput"
        },
        "context": {
          "description": "Extra context information for the verification of service businesses.\nRequired for the locations whose business type is CUSTOMER_LOCATION_ONLY.\nFor ADDRESS verification, the address will be used to send out postcard.\nFor other methods, it should be the same as the one that is passed to\nFetchVerificationOptions.\nINVALID_ARGUMENT will be thrown if it is set for other types of business\nlocations.",
          "$ref": "ServiceBusinessContext"
        }
      }
    },
    "EmailInput": {
      "id": "EmailInput",
      "description": "Input for EMAIL verification.",
      "type": "object",
      "properties": {
        "emailAddress": {
          "description": "Email address where the PIN should be sent to.\n\nAn email address is accepted only if it is one of the addresses provided\nby FetchVerificationOptions. If the EmailVerificationData has\nis_user_name_editable set to true, the client may specify a different\nuser name (local-part) but must match the domain name.",
          "type": "string"
        }
      }
    },
    "AddressInput": {
      "id": "AddressInput",
      "description": "Input for ADDRESS verification.",
      "type": "object",
      "properties": {
        "mailerContactName": {
          "description": "Contact name the mail should be sent to.",
          "type": "string"
        }
      }
    },
    "PhoneInput": {
      "id": "PhoneInput",
      "description": "Input for PHONE_CALL\/SMS verification.",
      "type": "object",
      "properties": {
        "phoneNumber": {
          "description": "The phone number that should be called or be sent SMS to. It must be one of\nthe phone numbers in the eligible options.",
          "type": "string"
        }
      }
    },
    "VerifyLocationResponse": {
      "id": "VerifyLocationResponse",
      "description": "Response message for Verifications.VerifyLocation.",
      "type": "object",
      "properties": {
        "verification": {
          "description": "The created verification request.",
          "$ref": "Verification"
        }
      }
    }
  },
  "resources": {
    "accounts": {
      "methods": {
        "list": {
          "id": "mybusiness.accounts.list",
          "path": "v4/accounts",
          "flatPath": "v4/accounts",
          "httpMethod": "GET",
          "parameters": {
            "pageSize": {
              "description": "How many accounts to fetch per page. Default is 20,\nminimum is 2, and maximum page size is 20.",
              "location": "query",
              "type": "integer",
              "format": "int32"
            },
            "pageToken": {
              "description": "If specified, the next page of accounts is retrieved. The `pageToken` is\nreturned when a call to `accounts.list` returns more results than can fit\ninto the requested page size.",
              "location": "query",
              "type": "string"
            },
            "name": {
              "description": "The resource name of the account for which the list of directly accessible\naccounts is to be retrieved. This only makes sense for Organizations and\nUser Groups. If empty, will return `ListAccounts` for the authenticated\nuser.",
              "location": "query",
              "type": "string"
            },
            "filter": {
              "description": "A filter constraining the accounts to return. The response includes\nonly entries that match the filter. If `filter` is empty, then no\nconstraints are applied and all accounts (paginated) are retrieved for\nthe requested account.\n\nFor example, a request with the filter `type=USER_GROUP` will only return\nuser groups.",
              "location": "query",
              "type": "string"
            }
          },
          "parameterOrder": [
          ],
          "response": {
            "$ref": "ListAccountsResponse"
          },
          "description": "Lists all of the accounts for the authenticated user. This includes all\naccounts that the user owns, as well as any accounts for which the user\nhas management rights."
        },
        "get": {
          "id": "mybusiness.accounts.get",
          "path": "v4/{+name}",
          "flatPath": "v4/accounts/{accountsId}",
          "httpMethod": "GET",
          "parameters": {
            "name": {
              "description": "The name of the account to fetch.",
              "location": "path",
              "required": true,
              "pattern": "^accounts\/[^\/]+$",
              "type": "string"
            }
          },
          "parameterOrder": [
            "name"
          ],
          "response": {
            "$ref": "Account"
          },
          "description": "Gets the specified account. Returns `NOT_FOUND` if the\naccount does not exist or if the caller does not have access rights to it."
        },
        "create": {
          "id": "mybusiness.accounts.create",
          "path": "v4/accounts",
          "flatPath": "v4/accounts",
          "httpMethod": "POST",
          "parameters": {
            "primaryOwner": {
              "description": "The resource name of the account which will be the primary owner of the\naccount being created. It should be of the form `accounts\/{account_id}\/`.",
              "location": "query",
              "type": "string"
            }
          },
          "parameterOrder": [
          ],
          "request": {
            "$ref": "Account"
          },
          "response": {
            "$ref": "Account"
          },
          "description": "Creates an account with the specified name and type under the given parent.\n<ul>\n<li> Personal accounts and Organizations cannot be created. <\/li>\n<li> User Groups cannot be created with a Personal account as primary\nowner. <\/li>\n<li> Location Groups cannot be created with a primary owner of a\nPersonal account if the Personal account is in an Organization. <\/li>\n<li> Location Groups cannot own Location Groups. <\/li>\n<\/ul>"
        },
        "update": {
          "id": "mybusiness.accounts.update",
          "path": "v4/{+name}",
          "flatPath": "v4/accounts/{accountsId}",
          "httpMethod": "PUT",
          "parameters": {
            "name": {
              "description": "The name of the account to update.",
              "location": "path",
              "required": true,
              "pattern": "^accounts\/[^\/]+$",
              "type": "string"
            },
            "validateOnly": {
              "description": "If true, the request is validated without actually updating the account.",
              "location": "query",
              "type": "boolean"
            }
          },
          "parameterOrder": [
            "name"
          ],
          "request": {
            "$ref": "Account"
          },
          "response": {
            "$ref": "Account"
          },
          "description": "Updates the specified business account. Personal accounts cannot be\nupdated using this method.\n<aside class=\"note\"><b>Note:<\/b> The only editable field for an account is\n`account_name`.\nAny other fields passed in (such as `type` or `role`) are\nignored.<\/aside>"
        },
        "generateAccountNumber": {
          "id": "mybusiness.accounts.generateAccountNumber",
          "path": "v4/{+name}:generateAccountNumber",
          "flatPath": "v4/accounts/{accountsId}:generateAccountNumber",
          "httpMethod": "POST",
          "parameters": {
            "name": {
              "description": "The name of the account to generate an account number for.",
              "location": "path",
              "required": true,
              "pattern": "^accounts\/[^\/]+$",
              "type": "string"
            }
          },
          "parameterOrder": [
            "name"
          ],
          "request": {
            "$ref": "GenerateAccountNumberRequest"
          },
          "response": {
            "$ref": "Account"
          },
          "description": "Generates an account number for this account. The account number is not\nprovisioned when an account is created. Use this request to create an\naccount number when it is required."
        },
        "getNotifications": {
          "id": "mybusiness.accounts.getNotifications",
          "path": "v4/{+name}",
          "flatPath": "v4/accounts/{accountsId}/notifications",
          "httpMethod": "GET",
          "parameters": {
            "name": {
              "description": "The notification settings resource name.",
              "location": "path",
              "required": true,
              "pattern": "^accounts\/[^\/]+\/notifications$",
              "type": "string"
            }
          },
          "parameterOrder": [
            "name"
          ],
          "response": {
            "$ref": "Notifications"
          },
          "description": "Returns the pubsub notification settings for the account."
        },
        "updateNotifications": {
          "id": "mybusiness.accounts.updateNotifications",
          "path": "v4/{+name}",
          "flatPath": "v4/accounts/{accountsId}/notifications",
          "httpMethod": "PUT",
          "parameters": {
            "name": {
              "description": "The notification settings resource name.",
              "location": "path",
              "required": true,
              "pattern": "^accounts\/[^\/]+\/notifications$",
              "type": "string"
            }
          },
          "parameterOrder": [
            "name"
          ],
          "request": {
            "$ref": "Notifications"
          },
          "response": {
            "$ref": "Notifications"
          },
          "description": "Sets the pubsub notification settings for the account informing My Business\nwhich topic to send pubsub notifications for:\n\n- New reviews for locations administered by the account.\n- Updated reviews for locations administered by the account.\n- New `GoogleUpdates` for locations administered by the account.\n\nAn account will only have one notification settings resource, and only one\npubsub topic can be set."
        },
        "deleteNotifications": {
          "id": "mybusiness.accounts.deleteNotifications",
          "path": "v4/{+name}",
          "flatPath": "v4/accounts/{accountsId}/notifications",
          "httpMethod": "DELETE",
          "parameters": {
            "name": {
              "description": "The resource name for the notification settings to be cleared.",
              "location": "path",
              "required": true,
              "pattern": "^accounts\/[^\/]+\/notifications$",
              "type": "string"
            }
          },
          "parameterOrder": [
            "name"
          ],
          "response": {
            "$ref": "Empty"
          },
          "description": "Clears the pubsub notification settings for the account."
        },
        "listRecommendGoogleLocations": {
          "id": "mybusiness.accounts.listRecommendGoogleLocations",
          "path": "v4/{+name}:recommendGoogleLocations",
          "flatPath": "v4/accounts/{accountsId}:recommendGoogleLocations",
          "httpMethod": "GET",
          "parameters": {
            "name": {
              "description": "Name of the account resource to fetch recommended Google locations for.",
              "location": "path",
              "required": true,
              "pattern": "^accounts\/[^\/]+$",
              "type": "string"
            },
            "pageSize": {
              "description": "How many locations to fetch per page. Default is 25, minimum is 1, and\nmaximum page size is 100.",
              "location": "query",
              "type": "integer",
              "format": "int32"
            },
            "pageToken": {
              "description": "If specified, the next page of locations is retrieved.",
              "location": "query",
              "type": "string"
            }
          },
          "parameterOrder": [
            "name"
          ],
          "response": {
            "$ref": "ListRecommendedGoogleLocationsResponse"
          },
          "description": "List all the GoogleLocations that\nhave been recommended to the specified GMB account.\nRecommendations are provided for personal accounts and location groups\nonly, requests for all other account types will result in an error.\nThe recommendations for location groups are based on the locations in that\ngroup.\n\nThe recommendations for personal accounts are based on all of\nthe locations that the user has access to on Google My Business (which\nincludes locations they can access through location groups), and is a\nsuperset of all recommendations generated for the user."
        }
      }
      ,
      "resources": {
        "invitations": {
          "methods": {
            "accept": {
              "id": "mybusiness.accounts.invitations.accept",
              "path": "v4/{+name}:accept",
              "flatPath": "v4/accounts/{accountsId}/invitations/{invitationsId}:accept",
              "httpMethod": "POST",
              "parameters": {
                "name": {
                  "description": "The name of the invitation that is being accepted.",
                  "location": "path",
                  "required": true,
                  "pattern": "^accounts\/[^\/]+\/invitations\/[^\/]+$",
                  "type": "string"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "request": {
                "$ref": "AcceptInvitationRequest"
              },
              "response": {
                "$ref": "Empty"
              },
              "description": "Accepts the specified invitation."
            },
            "decline": {
              "id": "mybusiness.accounts.invitations.decline",
              "path": "v4/{+name}:decline",
              "flatPath": "v4/accounts/{accountsId}/invitations/{invitationsId}:decline",
              "httpMethod": "POST",
              "parameters": {
                "name": {
                  "description": "The name of the account invitation that is being declined.",
                  "location": "path",
                  "required": true,
                  "pattern": "^accounts\/[^\/]+\/invitations\/[^\/]+$",
                  "type": "string"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "request": {
                "$ref": "DeclineInvitationRequest"
              },
              "response": {
                "$ref": "Empty"
              },
              "description": "Declines the specified invitation."
            },
            "list": {
              "id": "mybusiness.accounts.invitations.list",
              "path": "v4/{+parent}/invitations",
              "flatPath": "v4/accounts/{accountsId}/invitations",
              "httpMethod": "GET",
              "parameters": {
                "parent": {
                  "description": "The name of the account from which the list of invitations is being\nretrieved.",
                  "location": "path",
                  "required": true,
                  "pattern": "^accounts\/[^\/]+$",
                  "type": "string"
                },
                "targetType": {
                  "description": "Specifies which target types should appear in the response.",
                  "location": "query",
                  "type": "string",
                  "enum": [
                    "ALL",
                    "ACCOUNTS_ONLY",
                    "LOCATIONS_ONLY"
                  ]
                }
              },
              "parameterOrder": [
                "parent"
              ],
              "response": {
                "$ref": "ListInvitationsResponse"
              },
              "description": "Lists pending invitations for the specified account."
            }
          }
        },
        "admins": {
          "methods": {
            "list": {
              "id": "mybusiness.accounts.admins.list",
              "path": "v4/{+parent}/admins",
              "flatPath": "v4/accounts/{accountsId}/admins",
              "httpMethod": "GET",
              "parameters": {
                "parent": {
                  "description": "The name of the account from which to retrieve a list of admins.",
                  "location": "path",
                  "required": true,
                  "pattern": "^accounts\/[^\/]+$",
                  "type": "string"
                }
              },
              "parameterOrder": [
                "parent"
              ],
              "response": {
                "$ref": "ListAccountAdminsResponse"
              },
              "description": "Lists the admins for the specified account."
            },
            "create": {
              "id": "mybusiness.accounts.admins.create",
              "path": "v4/{+parent}/admins",
              "flatPath": "v4/accounts/{accountsId}/admins",
              "httpMethod": "POST",
              "parameters": {
                "parent": {
                  "description": "The resource name of the account this admin is created for.",
                  "location": "path",
                  "required": true,
                  "pattern": "^accounts\/[^\/]+$",
                  "type": "string"
                }
              },
              "parameterOrder": [
                "parent"
              ],
              "request": {
                "$ref": "Admin"
              },
              "response": {
                "$ref": "Admin"
              },
              "description": "Invites the specified user to become an administrator for the specified\naccount. The invitee must accept the invitation in order to be granted\naccess to the account. See AcceptInvitation to programmatically accept an\ninvitation."
            },
            "delete": {
              "id": "mybusiness.accounts.admins.delete",
              "path": "v4/{+name}",
              "flatPath": "v4/accounts/{accountsId}/admins/{adminsId}",
              "httpMethod": "DELETE",
              "parameters": {
                "name": {
                  "description": "The resource name of the admin to remove from the account.",
                  "location": "path",
                  "required": true,
                  "pattern": "^accounts\/[^\/]+\/admins\/[^\/]+$",
                  "type": "string"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "response": {
                "$ref": "Empty"
              },
              "description": "Removes the specified admin from the specified account."
            },
            "patch": {
              "id": "mybusiness.accounts.admins.patch",
              "path": "v4/{+name}",
              "flatPath": "v4/accounts/{accountsId}/admins/{adminsId}",
              "httpMethod": "PATCH",
              "parameters": {
                "name": {
                  "description": "The resource name of the admin to update.",
                  "location": "path",
                  "required": true,
                  "pattern": "^accounts\/[^\/]+\/admins\/[^\/]+$",
                  "type": "string"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "request": {
                "$ref": "Admin"
              },
              "response": {
                "$ref": "Admin"
              },
              "description": "Updates the Admin for the specified Account Admin. Only the AdminRole of\nthe Admin can be updated."
            }
          }
        },
        "locations": {
          "methods": {
            "reportInsights": {
              "id": "mybusiness.accounts.locations.reportInsights",
              "path": "v4/{+name}/locations:reportInsights",
              "flatPath": "v4/accounts/{accountsId}/locations:reportInsights",
              "httpMethod": "POST",
              "parameters": {
                "name": {
                  "description": "The account resource name.",
                  "location": "path",
                  "required": true,
                  "pattern": "^accounts\/[^\/]+$",
                  "type": "string"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "request": {
                "$ref": "ReportLocationInsightsRequest"
              },
              "response": {
                "$ref": "ReportLocationInsightsResponse"
              },
              "description": "Returns a report containing insights on one or more metrics by location.\n\n<aside class=\"note\"><b>Note:<\/b> Insight reports are limited\nto a batch size of 10 `location_names` per call.<\/aside>"
            },
            "list": {
              "id": "mybusiness.accounts.locations.list",
              "path": "v4/{+parent}/locations",
              "flatPath": "v4/accounts/{accountsId}/locations",
              "httpMethod": "GET",
              "parameters": {
                "parent": {
                  "description": "The name of the account to fetch locations from. If the Account is of AccountType PERSONAL, only Locations that are\ndirectly owned by the Account are returned, otherwise it will return all\naccessible locations from the Account, either directly or indirectly.",
                  "location": "path",
                  "required": true,
                  "pattern": "^accounts\/[^\/]+$",
                  "type": "string"
                },
                "pageSize": {
                  "description": "How many locations to fetch per page. Default is 100,\nminimum is 1, and maximum page size is 100.",
                  "location": "query",
                  "type": "integer",
                  "format": "int32"
                },
                "pageToken": {
                  "description": "If specified, it fetches the next `page` of locations. The page token\nis returned by previous calls to `ListLocations` when there were more\nlocations than could fit in the requested page size.",
                  "location": "query",
                  "type": "string"
                },
                "filter": {
                  "description": "A filter constraining the locations to return. The response includes\nonly entries that match the filter. If `filter` is empty, then\nconstraints are applied and all locations (paginated) are retrieved for\nthe requested account.\n\nFor more information about valid fields and example usage, see [Work with\nLocation Data\nGuide](https:\/\/developers.google.com\/my-business\/content\/location-data#filter_results_when_listing_locations).",
                  "location": "query",
                  "type": "string"
                },
                "languageCode": {
                  "description": "The BCP 47 code of language to get display location properties in. If this\nlanguage is not available, they will be provided in the language of the\nlocation. If neither is available, they will be provided in English.",
                  "location": "query",
                  "type": "string"
                },
                "orderBy": {
                  "description": "Sorting order for the request. Multiple fields should be comma-separated,\nfollowing SQL syntax.\nThe default sorting order is ascending. To specify descending order, a\nsuffix \" desc\" should be added.\nValid fields to order_by are location_name and store_code. For example:\n\"location_name, store_code desc\" or \"location_name\" or \"store_code desc\"",
                  "location": "query",
                  "type": "string"
                }
              },
              "parameterOrder": [
                "parent"
              ],
              "response": {
                "$ref": "ListLocationsResponse"
              },
              "description": "Lists the locations for the specified account."
            },
            "get": {
              "id": "mybusiness.accounts.locations.get",
              "path": "v4/{+name}",
              "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}",
              "httpMethod": "GET",
              "parameters": {
                "name": {
                  "description": "The name of the location to fetch.",
                  "location": "path",
                  "required": true,
                  "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+$",
                  "type": "string"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "response": {
                "$ref": "Location"
              },
              "description": "Gets the specified location. Returns `NOT_FOUND` if the\nlocation does not exist."
            },
            "batchGet": {
              "id": "mybusiness.accounts.locations.batchGet",
              "path": "v4/{+name}/locations:batchGet",
              "flatPath": "v4/accounts/{accountsId}/locations:batchGet",
              "httpMethod": "POST",
              "parameters": {
                "name": {
                  "description": "The name of the account from which to fetch locations.",
                  "location": "path",
                  "required": true,
                  "pattern": "^accounts\/[^\/]+$",
                  "type": "string"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "request": {
                "$ref": "BatchGetLocationsRequest"
              },
              "response": {
                "$ref": "BatchGetLocationsResponse"
              },
              "description": "Gets all of the specified locations in the given account."
            },
            "getGoogleUpdated": {
              "id": "mybusiness.accounts.locations.getGoogleUpdated",
              "path": "v4/{+name}:googleUpdated",
              "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}:googleUpdated",
              "httpMethod": "GET",
              "parameters": {
                "name": {
                  "description": "The name of the location to fetch.",
                  "location": "path",
                  "required": true,
                  "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+$",
                  "type": "string"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "response": {
                "$ref": "GoogleUpdatedLocation"
              },
              "description": "Gets the Google-updated version of the specified location.\nReturns `NOT_FOUND` if the location does not exist."
            },
            "create": {
              "id": "mybusiness.accounts.locations.create",
              "path": "v4/{+parent}/locations",
              "flatPath": "v4/accounts/{accountsId}/locations",
              "httpMethod": "POST",
              "parameters": {
                "parent": {
                  "description": "The name of the account in which to create this location.",
                  "location": "path",
                  "required": true,
                  "pattern": "^accounts\/[^\/]+$",
                  "type": "string"
                },
                "validateOnly": {
                  "description": "If true, the request is validated without actually creating the location.",
                  "location": "query",
                  "type": "boolean"
                },
                "requestId": {
                  "description": "A unique request ID for the server to detect duplicated requests.\nWe recommend using UUIDs. Max length is 50 characters.",
                  "location": "query",
                  "type": "string"
                }
              },
              "parameterOrder": [
                "parent"
              ],
              "request": {
                "$ref": "Location"
              },
              "response": {
                "$ref": "Location"
              },
              "description": "Creates a new location owned by the\nspecified account, and returns it."
            },
            "patch": {
              "id": "mybusiness.accounts.locations.patch",
              "path": "v4/{+name}",
              "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}",
              "httpMethod": "PATCH",
              "parameters": {
                "name": {
                  "description": "The name of the location to update.",
                  "location": "path",
                  "required": true,
                  "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+$",
                  "type": "string"
                },
                "updateMask": {
                  "description": "The specific fields to update. If no mask is specified, then this is\ntreated as a full update and all fields are set to the values passed\nin, which may include unsetting empty fields in the request.",
                  "location": "query",
                  "type": "string",
                  "format": "google-fieldmask"
                },
                "validateOnly": {
                  "description": "If true, the request is validated without actually updating the location.",
                  "location": "query",
                  "type": "boolean"
                },
                "attributeMask": {
                  "description": "The IDs of the attributes to update. Only attributes noted in the mask will\nbe updated. If an attribute is present in the mask and not in the location,\nit will be removed. An empty mask will update all attributes.\n\nWhenever this field is set, the update_mask should include attributes as\none of the fields to update.",
                  "location": "query",
                  "type": "string",
                  "format": "google-fieldmask"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "request": {
                "$ref": "Location"
              },
              "response": {
                "$ref": "Location"
              },
              "description": "Updates the specified location.\n\nPhotos are only allowed on a location that has a Google+ page.\n\nReturns `NOT_FOUND` if the location does not exist."
            },
            "delete": {
              "id": "mybusiness.accounts.locations.delete",
              "path": "v4/{+name}",
              "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}",
              "httpMethod": "DELETE",
              "parameters": {
                "name": {
                  "description": "The name of the location to delete.",
                  "location": "path",
                  "required": true,
                  "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+$",
                  "type": "string"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "response": {
                "$ref": "Empty"
              },
              "description": "Deletes a location.\n\n<aside class=\"note\"><b>Note:<\/b> If this location cannot be deleted using\nthe API as marked in the\nLocationState, use the [Google My\nBusiness](https:\/\/business.google.com\/manage\/) website.\n\nReturns `NOT_FOUND` if the location does not exist."
            },
            "findMatches": {
              "id": "mybusiness.accounts.locations.findMatches",
              "path": "v4/{+name}:findMatches",
              "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}:findMatches",
              "httpMethod": "POST",
              "parameters": {
                "name": {
                  "description": "The resource name of the location to find matches for.",
                  "location": "path",
                  "required": true,
                  "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+$",
                  "type": "string"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "request": {
                "$ref": "FindMatchingLocationsRequest"
              },
              "response": {
                "$ref": "FindMatchingLocationsResponse"
              },
              "description": "Finds all of the possible locations that are a match to the specified\nlocation. This operation is only valid if the location is unverified."
            },
            "associate": {
              "id": "mybusiness.accounts.locations.associate",
              "path": "v4/{+name}:associate",
              "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}:associate",
              "httpMethod": "POST",
              "parameters": {
                "name": {
                  "description": "The resource name of the location to associate.",
                  "location": "path",
                  "required": true,
                  "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+$",
                  "type": "string"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "request": {
                "$ref": "AssociateLocationRequest"
              },
              "response": {
                "$ref": "Empty"
              },
              "description": "Associates a location to a place ID. Any previous association is\noverwritten. This operation is only valid if the location is unverified.\nThe association must be valid, that is, it appears in the list of\n`FindMatchingLocations`."
            },
            "clearAssociation": {
              "id": "mybusiness.accounts.locations.clearAssociation",
              "path": "v4/{+name}:clearAssociation",
              "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}:clearAssociation",
              "httpMethod": "POST",
              "parameters": {
                "name": {
                  "description": "The resource name of the location to disassociate.",
                  "location": "path",
                  "required": true,
                  "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+$",
                  "type": "string"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "request": {
                "$ref": "ClearLocationAssociationRequest"
              },
              "response": {
                "$ref": "Empty"
              },
              "description": "Clears an association between a location and its place ID. This\noperation is only valid if the location is unverified."
            },
            "transfer": {
              "id": "mybusiness.accounts.locations.transfer",
              "path": "v4/{+name}:transfer",
              "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}:transfer",
              "httpMethod": "POST",
              "parameters": {
                "name": {
                  "description": "The name of the location to transfer.",
                  "location": "path",
                  "required": true,
                  "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+$",
                  "type": "string"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "request": {
                "$ref": "TransferLocationRequest"
              },
              "response": {
                "$ref": "Location"
              },
              "description": "Moves a location from an account that the user owns to another account\nthat the same user administers. The user must be an owner of the account\nthe location is currently associated with and must also be at least a\nmanager of the destination account. Returns the Location with its new\nresource name."
            },
            "batchGetReviews": {
              "id": "mybusiness.accounts.locations.batchGetReviews",
              "path": "v4/{+name}/locations:batchGetReviews",
              "flatPath": "v4/accounts/{accountsId}/locations:batchGetReviews",
              "httpMethod": "POST",
              "parameters": {
                "name": {
                  "description": "The name of the account from which to retrieve a list of reviews across\nmultiple locations.",
                  "location": "path",
                  "required": true,
                  "pattern": "^accounts\/[^\/]+$",
                  "type": "string"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "request": {
                "$ref": "BatchGetReviewsRequest"
              },
              "response": {
                "$ref": "BatchGetReviewsResponse"
              },
              "description": "Returns the paginated list of reviews for all specified locations.\nThis operation is only valid if the specified locations are verified.\n<aside class=\"note\"><b>Note:<\/b> Reviews are limited\nto a batch size of 200 `location_names` per call.<\/aside>"
            },
            "fetchVerificationOptions": {
              "id": "mybusiness.accounts.locations.fetchVerificationOptions",
              "path": "v4/{+name}:fetchVerificationOptions",
              "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}:fetchVerificationOptions",
              "httpMethod": "POST",
              "parameters": {
                "name": {
                  "description": "Resource name of the location to verify.",
                  "location": "path",
                  "required": true,
                  "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+$",
                  "type": "string"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "request": {
                "$ref": "FetchVerificationOptionsRequest"
              },
              "response": {
                "$ref": "FetchVerificationOptionsResponse"
              },
              "description": "Reports all eligible verification options for a location in a specific\nlanguage."
            },
            "verify": {
              "id": "mybusiness.accounts.locations.verify",
              "path": "v4/{+name}:verify",
              "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}:verify",
              "httpMethod": "POST",
              "parameters": {
                "name": {
                  "description": "Resource name of the location to verify.",
                  "location": "path",
                  "required": true,
                  "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+$",
                  "type": "string"
                }
              },
              "parameterOrder": [
                "name"
              ],
              "request": {
                "$ref": "VerifyLocationRequest"
              },
              "response": {
                "$ref": "VerifyLocationResponse"
              },
              "description": "Starts the verification process for a location."
            }
          }
          ,
          "resources": {
            "admins": {
              "methods": {
                "list": {
                  "id": "mybusiness.accounts.locations.admins.list",
                  "path": "v4/{+parent}/admins",
                  "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/admins",
                  "httpMethod": "GET",
                  "parameters": {
                    "parent": {
                      "description": "The name of the location to list admins of.",
                      "location": "path",
                      "required": true,
                      "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+$",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "response": {
                    "$ref": "ListLocationAdminsResponse"
                  },
                  "description": "Lists all of the admins for the specified location."
                },
                "create": {
                  "id": "mybusiness.accounts.locations.admins.create",
                  "path": "v4/{+parent}/admins",
                  "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/admins",
                  "httpMethod": "POST",
                  "parameters": {
                    "parent": {
                      "description": "The resource name of the location this admin is created for.",
                      "location": "path",
                      "required": true,
                      "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+$",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "request": {
                    "$ref": "Admin"
                  },
                  "response": {
                    "$ref": "Admin"
                  },
                  "description": "Invites the specified user to become an administrator for the specified\nlocation. The invitee must accept the invitation in order to be granted\naccess to the location. See AcceptInvitation to programmatically accept an\ninvitation."
                },
                "delete": {
                  "id": "mybusiness.accounts.locations.admins.delete",
                  "path": "v4/{+name}",
                  "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/admins/{adminsId}",
                  "httpMethod": "DELETE",
                  "parameters": {
                    "name": {
                      "description": "The resource name of the admin to remove from the location.",
                      "location": "path",
                      "required": true,
                      "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+\/admins\/[^\/]+$",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "response": {
                    "$ref": "Empty"
                  },
                  "description": "Removes the specified admin as a manager of the specified location."
                },
                "patch": {
                  "id": "mybusiness.accounts.locations.admins.patch",
                  "path": "v4/{+name}",
                  "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/admins/{adminsId}",
                  "httpMethod": "PATCH",
                  "parameters": {
                    "name": {
                      "description": "The resource name of the admin to update.",
                      "location": "path",
                      "required": true,
                      "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+\/admins\/[^\/]+$",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "request": {
                    "$ref": "Admin"
                  },
                  "response": {
                    "$ref": "Admin"
                  },
                  "description": "Updates the Admin for the specified Location Admin. Only the AdminRole of\nthe Admin can be updated."
                }
              }
            },
            "followers": {
              "methods": {
                "getMetadata": {
                  "id": "mybusiness.accounts.locations.followers.getMetadata",
                  "path": "v4/{+name}",
                  "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/followers/metadata",
                  "httpMethod": "GET",
                  "parameters": {
                    "name": {
                      "description": "The resource name of the location's followers metadata.\naccounts\/{account_id}\/locations\/{location_id}\/followers\/metadata",
                      "location": "path",
                      "required": true,
                      "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+\/followers\/metadata$",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "response": {
                    "$ref": "FollowersMetadata"
                  },
                  "description": "Get the followers settings for a location.\n\nNOT_FOUND is returned if either the account or the location doesn't exist.\nPRECONDITION_FAILED is returned if the location is not verified nor\nconnected to Maps."
                }
              }
            },
            "localPosts": {
              "methods": {
                "reportInsights": {
                  "id": "mybusiness.accounts.locations.localPosts.reportInsights",
                  "path": "v4/{+name}/localPosts:reportInsights",
                  "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/localPosts:reportInsights",
                  "httpMethod": "POST",
                  "parameters": {
                    "name": {
                      "description": "Required. The name of the location for which to fetch insights.",
                      "location": "path",
                      "required": true,
                      "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+$",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "request": {
                    "$ref": "ReportLocalPostInsightsRequest"
                  },
                  "response": {
                    "$ref": "ReportLocalPostInsightsResponse"
                  },
                  "description": "Returns insights for a set of local posts associated with a single listing.\nWhich metrics and how they are reported are options specified in the\nrequest proto.\n<aside class=\"note\"><b>Note:<\/b> Insight reports are limited\nto 100 `local_post_names` per call.<\/aside>"
                },
                "create": {
                  "id": "mybusiness.accounts.locations.localPosts.create",
                  "path": "v4/{+parent}/localPosts",
                  "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/localPosts",
                  "httpMethod": "POST",
                  "parameters": {
                    "parent": {
                      "description": "The name of the location in which to create this local post.",
                      "location": "path",
                      "required": true,
                      "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+$",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "request": {
                    "$ref": "LocalPost"
                  },
                  "response": {
                    "$ref": "LocalPost"
                  },
                  "description": "Creates a new local post associated with the specified location, and\nreturns it."
                },
                "delete": {
                  "id": "mybusiness.accounts.locations.localPosts.delete",
                  "path": "v4/{+name}",
                  "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/localPosts/{localPostsId}",
                  "httpMethod": "DELETE",
                  "parameters": {
                    "name": {
                      "description": "The name of the local post to delete.",
                      "location": "path",
                      "required": true,
                      "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+\/localPosts\/[^\/]+$",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "response": {
                    "$ref": "Empty"
                  },
                  "description": "Deletes a local post.\nReturns `NOT_FOUND` if the local post does not exist."
                },
                "get": {
                  "id": "mybusiness.accounts.locations.localPosts.get",
                  "path": "v4/{+name}",
                  "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/localPosts/{localPostsId}",
                  "httpMethod": "GET",
                  "parameters": {
                    "name": {
                      "description": "The name of the local post to fetch.",
                      "location": "path",
                      "required": true,
                      "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+\/localPosts\/[^\/]+$",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "response": {
                    "$ref": "LocalPost"
                  },
                  "description": "Gets the specified local post.\nReturns `NOT_FOUND` if the local post does not exist."
                },
                "list": {
                  "id": "mybusiness.accounts.locations.localPosts.list",
                  "path": "v4/{+parent}/localPosts",
                  "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/localPosts",
                  "httpMethod": "GET",
                  "parameters": {
                    "parent": {
                      "description": "The name of the location whose local posts will be listed.",
                      "location": "path",
                      "required": true,
                      "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+$",
                      "type": "string"
                    },
                    "pageSize": {
                      "description": "How many local posts to return per page. Default of 20. The minimum is 1,\nand maximum page size is 100.",
                      "location": "query",
                      "type": "integer",
                      "format": "int32"
                    },
                    "pageToken": {
                      "description": "If specified, returns the next page of local posts.",
                      "location": "query",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "response": {
                    "$ref": "ListLocalPostsResponse"
                  },
                  "description": "Returns a list of local posts associated with a location."
                },
                "patch": {
                  "id": "mybusiness.accounts.locations.localPosts.patch",
                  "path": "v4/{+name}",
                  "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/localPosts/{localPostsId}",
                  "httpMethod": "PATCH",
                  "parameters": {
                    "name": {
                      "description": "The name of the local post to update.",
                      "location": "path",
                      "required": true,
                      "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+\/localPosts\/[^\/]+$",
                      "type": "string"
                    },
                    "updateMask": {
                      "description": "The specific fields to update. You must specify each field that is being\nupdated in the mask.",
                      "location": "query",
                      "type": "string",
                      "format": "google-fieldmask"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "request": {
                    "$ref": "LocalPost"
                  },
                  "response": {
                    "$ref": "LocalPost"
                  },
                  "description": "Updates the specified local post and returns the updated local post."
                }
              }
            },
            "media": {
              "methods": {
                "list": {
                  "id": "mybusiness.accounts.locations.media.list",
                  "path": "v4/{+parent}/media",
                  "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/media",
                  "httpMethod": "GET",
                  "parameters": {
                    "parent": {
                      "description": "The name of the location whose media items will be listed.",
                      "location": "path",
                      "required": true,
                      "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+$",
                      "type": "string"
                    },
                    "pageSize": {
                      "description": "How many media items to return per page. The default value is 100, which is\nalso the maximum supported number of media items able to be added to a\nlocation with the My Business API. Maximum page size is 2500.",
                      "location": "query",
                      "type": "integer",
                      "format": "int32"
                    },
                    "pageToken": {
                      "description": "If specified, returns the next page of media items.",
                      "location": "query",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "response": {
                    "$ref": "ListMediaItemsResponse"
                  },
                  "description": "Returns a list of media items associated with a location."
                },
                "get": {
                  "id": "mybusiness.accounts.locations.media.get",
                  "path": "v4/{+name}",
                  "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/media/{mediaId}",
                  "httpMethod": "GET",
                  "parameters": {
                    "name": {
                      "description": "The name of the requested media item.",
                      "location": "path",
                      "required": true,
                      "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+\/media\/[^\/]+$",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "response": {
                    "$ref": "MediaItem"
                  },
                  "description": "Returns metadata for the requested media item."
                },
                "startUpload": {
                  "id": "mybusiness.accounts.locations.media.startUpload",
                  "path": "v4/{+parent}/media:startUpload",
                  "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/media:startUpload",
                  "httpMethod": "POST",
                  "parameters": {
                    "parent": {
                      "description": "The resource name of the location this media item is to be added to.",
                      "location": "path",
                      "required": true,
                      "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+$",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "request": {
                    "$ref": "StartUploadMediaItemDataRequest"
                  },
                  "response": {
                    "$ref": "MediaItemDataRef"
                  },
                  "description": "Generates a `MediaItemDataRef` for media item uploading."
                },
                "create": {
                  "id": "mybusiness.accounts.locations.media.create",
                  "path": "v4/{+parent}/media",
                  "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/media",
                  "httpMethod": "POST",
                  "parameters": {
                    "parent": {
                      "description": "The resource name of the location where this media item will be created.",
                      "location": "path",
                      "required": true,
                      "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+$",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "request": {
                    "$ref": "MediaItem"
                  },
                  "response": {
                    "$ref": "MediaItem"
                  },
                  "description": "Creates a new media item for the location."
                },
                "delete": {
                  "id": "mybusiness.accounts.locations.media.delete",
                  "path": "v4/{+name}",
                  "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/media/{mediaId}",
                  "httpMethod": "DELETE",
                  "parameters": {
                    "name": {
                      "description": "The name of the media item to be deleted.",
                      "location": "path",
                      "required": true,
                      "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+\/media\/[^\/]+$",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "response": {
                    "$ref": "Empty"
                  },
                  "description": "Deletes the specified media item."
                },
                "patch": {
                  "id": "mybusiness.accounts.locations.media.patch",
                  "path": "v4/{+name}",
                  "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/media/{mediaId}",
                  "httpMethod": "PATCH",
                  "parameters": {
                    "name": {
                      "description": "The name of the media item to be updated.",
                      "location": "path",
                      "required": true,
                      "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+\/media\/[^\/]+$",
                      "type": "string"
                    },
                    "updateMask": {
                      "description": "The specific fields to update. If no mask is specified, then this is\ntreated as a full update and all editable fields are set to the values\npassed in.",
                      "location": "query",
                      "type": "string",
                      "format": "google-fieldmask"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "request": {
                    "$ref": "MediaItem"
                  },
                  "response": {
                    "$ref": "MediaItem"
                  },
                  "description": "Updates metadata of the specified media item.\nThis can only be used to update the Category of a media item,\nwith the exception that the new category cannot be COVER or PROFILE."
                }
              }
              ,
              "resources": {
                "customers": {
                  "methods": {
                    "list": {
                      "id": "mybusiness.accounts.locations.media.customers.list",
                      "path": "v4/{+parent}/media/customers",
                      "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/media/customers",
                      "httpMethod": "GET",
                      "parameters": {
                        "parent": {
                          "description": "The name of the location whose customer media items will be listed.",
                          "location": "path",
                          "required": true,
                          "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+$",
                          "type": "string"
                        },
                        "pageSize": {
                          "description": "How many media items to return per page. The default value is 100, the\nmaximum supported page size is 200.",
                          "location": "query",
                          "type": "integer",
                          "format": "int32"
                        },
                        "pageToken": {
                          "description": "If specified, returns the next page of media items.",
                          "location": "query",
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "parent"
                      ],
                      "response": {
                        "$ref": "ListCustomerMediaItemsResponse"
                      },
                      "description": "Returns a list of media items associated with a location that have been\ncontributed by customers."
                    },
                    "get": {
                      "id": "mybusiness.accounts.locations.media.customers.get",
                      "path": "v4/{+name}",
                      "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/media/customers/{customersId}",
                      "httpMethod": "GET",
                      "parameters": {
                        "name": {
                          "description": "The resource name of the requested customer media item.",
                          "location": "path",
                          "required": true,
                          "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+\/media\/customers\/[^\/]+$",
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "name"
                      ],
                      "response": {
                        "$ref": "MediaItem"
                      },
                      "description": "Returns metadata for the requested customer media item."
                    }
                  }
                }
              }
            },
            "questions": {
              "methods": {
                "list": {
                  "id": "mybusiness.accounts.locations.questions.list",
                  "path": "v4/{+parent}/questions",
                  "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/questions",
                  "httpMethod": "GET",
                  "parameters": {
                    "parent": {
                      "description": "The name of the location to fetch questions for.",
                      "location": "path",
                      "required": true,
                      "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+$",
                      "type": "string"
                    },
                    "pageSize": {
                      "description": "How many questions to fetch per page. The default and maximum `page_size`\nvalues are 10.",
                      "location": "query",
                      "type": "integer",
                      "format": "int32"
                    },
                    "pageToken": {
                      "description": "If specified, the next page of questions is retrieved.",
                      "location": "query",
                      "type": "string"
                    },
                    "answersPerQuestion": {
                      "description": "How many answers to fetch per question. The default and maximum\n`answers_per_question` values are 10.",
                      "location": "query",
                      "type": "integer",
                      "format": "int32"
                    },
                    "filter": {
                      "description": "A filter constraining the questions to return. The only filter currently\nsupported is \"ignore_answered=true\"",
                      "location": "query",
                      "type": "string"
                    },
                    "orderBy": {
                      "description": "The order to return the questions. Valid options include 'update_time desc'\nand 'upvote_count desc', which will return the questions sorted\ndescendingly by the requested field. The default sort order is 'update_time\ndesc'.",
                      "location": "query",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "response": {
                    "$ref": "ListQuestionsResponse"
                  },
                  "description": "Returns the paginated list of questions and some of its answers for a\nspecified location."
                },
                "create": {
                  "id": "mybusiness.accounts.locations.questions.create",
                  "path": "v4/{+parent}/questions",
                  "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/questions",
                  "httpMethod": "POST",
                  "parameters": {
                    "parent": {
                      "description": "The name of the location to write a question for.",
                      "location": "path",
                      "required": true,
                      "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+$",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "request": {
                    "$ref": "Question"
                  },
                  "response": {
                    "$ref": "Question"
                  },
                  "description": "Adds a question for the specified location."
                },
                "patch": {
                  "id": "mybusiness.accounts.locations.questions.patch",
                  "path": "v4/{+name}",
                  "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/questions/{questionsId}",
                  "httpMethod": "PATCH",
                  "parameters": {
                    "name": {
                      "description": "The name of the question to update.",
                      "location": "path",
                      "required": true,
                      "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+\/questions\/[^\/]+$",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "request": {
                    "$ref": "Question"
                  },
                  "response": {
                    "$ref": "Question"
                  },
                  "description": "Updates a specific question written by the current user."
                },
                "delete": {
                  "id": "mybusiness.accounts.locations.questions.delete",
                  "path": "v4/{+name}",
                  "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/questions/{questionsId}",
                  "httpMethod": "DELETE",
                  "parameters": {
                    "name": {
                      "description": "The name of the question to delete.",
                      "location": "path",
                      "required": true,
                      "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+\/questions\/[^\/]+$",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "response": {
                    "$ref": "Empty"
                  },
                  "description": "Deletes a specific question written by the current user."
                }
              }
              ,
              "resources": {
                "answers": {
                  "methods": {
                    "list": {
                      "id": "mybusiness.accounts.locations.questions.answers.list",
                      "path": "v4/{+parent}/answers",
                      "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/questions/{questionsId}/answers",
                      "httpMethod": "GET",
                      "parameters": {
                        "parent": {
                          "description": "The name of the question to fetch answers for.",
                          "location": "path",
                          "required": true,
                          "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+\/questions\/[^\/]+$",
                          "type": "string"
                        },
                        "pageSize": {
                          "description": "How many answers to fetch per page. The default and maximum `page_size`\nvalues are 10.",
                          "location": "query",
                          "type": "integer",
                          "format": "int32"
                        },
                        "pageToken": {
                          "description": "If specified, the next page of answers is retrieved.",
                          "location": "query",
                          "type": "string"
                        },
                        "orderBy": {
                          "description": "The order to return the answers. Valid options include 'update_time desc'\nand 'upvote_count desc', which will return the answers sorted\ndescendingly by the requested field. The default sort order is 'update_time\ndesc'.",
                          "location": "query",
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "parent"
                      ],
                      "response": {
                        "$ref": "ListAnswersResponse"
                      },
                      "description": "Returns the paginated list of answers for a specified question."
                    },
                    "upsert": {
                      "id": "mybusiness.accounts.locations.questions.answers.upsert",
                      "path": "v4/{+parent}/answers:upsert",
                      "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/questions/{questionsId}/answers:upsert",
                      "httpMethod": "POST",
                      "parameters": {
                        "parent": {
                          "description": "The name of the question to write an answer for.",
                          "location": "path",
                          "required": true,
                          "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+\/questions\/[^\/]+$",
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "parent"
                      ],
                      "request": {
                        "$ref": "UpsertAnswerRequest"
                      },
                      "response": {
                        "$ref": "Answer"
                      },
                      "description": "Creates an answer or updates the existing answer written by the user for\nthe specified question. A user can only create one answer per question."
                    },
                    "delete": {
                      "id": "mybusiness.accounts.locations.questions.answers.delete",
                      "path": "v4/{+parent}/answers:delete",
                      "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/questions/{questionsId}/answers:delete",
                      "httpMethod": "DELETE",
                      "parameters": {
                        "parent": {
                          "description": "The name of the question to delete an answer for.",
                          "location": "path",
                          "required": true,
                          "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+\/questions\/[^\/]+$",
                          "type": "string"
                        }
                      },
                      "parameterOrder": [
                        "parent"
                      ],
                      "response": {
                        "$ref": "Empty"
                      },
                      "description": "Deletes the answer written by the current user to a question."
                    }
                  }
                }
              }
            },
            "reviews": {
              "methods": {
                "deleteReply": {
                  "id": "mybusiness.accounts.locations.reviews.deleteReply",
                  "path": "v4/{+name}/reply",
                  "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/reviews/{reviewsId}/reply",
                  "httpMethod": "DELETE",
                  "parameters": {
                    "name": {
                      "description": "The name of the review reply to delete.",
                      "location": "path",
                      "required": true,
                      "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+\/reviews\/[^\/]+$",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "response": {
                    "$ref": "Empty"
                  },
                  "description": "Deletes the response to the specified review.\nThis operation is only valid if the specified location is verified."
                },
                "get": {
                  "id": "mybusiness.accounts.locations.reviews.get",
                  "path": "v4/{+name}",
                  "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/reviews/{reviewsId}",
                  "httpMethod": "GET",
                  "parameters": {
                    "name": {
                      "description": "The name of the review to fetch.",
                      "location": "path",
                      "required": true,
                      "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+\/reviews\/[^\/]+$",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "response": {
                    "$ref": "Review"
                  },
                  "description": "Returns the specified review.\nThis operation is only valid if the specified location is verified.\nReturns `NOT_FOUND` if the review does not exist, or has been deleted."
                },
                "list": {
                  "id": "mybusiness.accounts.locations.reviews.list",
                  "path": "v4/{+parent}/reviews",
                  "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/reviews",
                  "httpMethod": "GET",
                  "parameters": {
                    "parent": {
                      "description": "The name of the location to fetch reviews for.",
                      "location": "path",
                      "required": true,
                      "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+$",
                      "type": "string"
                    },
                    "pageSize": {
                      "description": "How many reviews to fetch per page. The maximum `page_size` is\n200.",
                      "location": "query",
                      "type": "integer",
                      "format": "int32"
                    },
                    "pageToken": {
                      "description": "If specified, it fetches the next page of reviews.",
                      "location": "query",
                      "type": "string"
                    },
                    "orderBy": {
                      "description": "Specifies the field to sort reviews by.\nIf unspecified, the order of reviews returned will\ndefault to `update_time desc`.\nValid orders to sort by are `rating`, `rating desc` and\n`update_time desc`.",
                      "location": "query",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "response": {
                    "$ref": "ListReviewsResponse"
                  },
                  "description": "Returns the paginated list of reviews for the specified location.\nThis operation is only valid if the specified location is verified."
                },
                "updateReply": {
                  "id": "mybusiness.accounts.locations.reviews.updateReply",
                  "path": "v4/{+name}/reply",
                  "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/reviews/{reviewsId}/reply",
                  "httpMethod": "PUT",
                  "parameters": {
                    "name": {
                      "description": "The name of the review to respond to.",
                      "location": "path",
                      "required": true,
                      "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+\/reviews\/[^\/]+$",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "request": {
                    "$ref": "ReviewReply"
                  },
                  "response": {
                    "$ref": "ReviewReply"
                  },
                  "description": "Updates the reply to the specified review.\nA reply is created if one does not exist.\nThis operation is only valid if the specified location is verified."
                }
              }
            },
            "verifications": {
              "methods": {
                "complete": {
                  "id": "mybusiness.accounts.locations.verifications.complete",
                  "path": "v4/{+name}:complete",
                  "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/verifications/{verificationsId}:complete",
                  "httpMethod": "POST",
                  "parameters": {
                    "name": {
                      "description": "Resource name of the verification to complete.",
                      "location": "path",
                      "required": true,
                      "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+\/verifications\/[^\/]+$",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "name"
                  ],
                  "request": {
                    "$ref": "CompleteVerificationRequest"
                  },
                  "response": {
                    "$ref": "CompleteVerificationResponse"
                  },
                  "description": "Completes a `PENDING` verification.\n\nIt is only necessary for non `AUTO` verification methods. `AUTO`\nverification request is instantly `VERIFIED` upon creation."
                },
                "list": {
                  "id": "mybusiness.accounts.locations.verifications.list",
                  "path": "v4/{+parent}/verifications",
                  "flatPath": "v4/accounts/{accountsId}/locations/{locationsId}/verifications",
                  "httpMethod": "GET",
                  "parameters": {
                    "parent": {
                      "description": "Resource name of the location that verification requests belong to.",
                      "location": "path",
                      "required": true,
                      "pattern": "^accounts\/[^\/]+\/locations\/[^\/]+$",
                      "type": "string"
                    },
                    "pageSize": {
                      "description": "How many verification to include per page. If not set, return all.",
                      "location": "query",
                      "type": "integer",
                      "format": "int32"
                    },
                    "pageToken": {
                      "description": "If specified, returns the next page of verifications.",
                      "location": "query",
                      "type": "string"
                    }
                  },
                  "parameterOrder": [
                    "parent"
                  ],
                  "response": {
                    "$ref": "ListVerificationsResponse"
                  },
                  "description": "List verifications of a location, ordered by create time."
                }
              }
            }
          }
        }
      }
    },
    "categories": {
      "methods": {
        "list": {
          "id": "mybusiness.categories.list",
          "path": "v4/categories",
          "flatPath": "v4/categories",
          "httpMethod": "GET",
          "parameters": {
            "regionCode": {
              "description": "The ISO 3166-1 alpha-2 country code.",
              "location": "query",
              "type": "string"
            },
            "languageCode": {
              "description": "The BCP 47 code of language. If the language is not available, it will\ndefault to English.",
              "location": "query",
              "type": "string"
            },
            "searchTerm": {
              "description": "Optional filter string from user.",
              "location": "query",
              "type": "string"
            },
            "pageSize": {
              "description": "How many categories to fetch per page. Default is 100,\nminimum is 1, and maximum page size is 100.",
              "location": "query",
              "type": "integer",
              "format": "int32"
            },
            "pageToken": {
              "description": "If specified, the next page of categories will be fetched.",
              "location": "query",
              "type": "string"
            }
          },
          "parameterOrder": [
          ],
          "response": {
            "$ref": "ListBusinessCategoriesResponse"
          },
          "description": "Returns a list of business categories. Search will match the category name\nbut not the category ID.\n\n<aside class=\"note\"><b>Note:<\/b> Search only matches the front of\na category name (that is, 'food' may return 'Food Court' but not 'Fast Food\nRestaurant').<\/aside>"
        }
      }
    },
    "googleLocations": {
      "methods": {
        "search": {
          "id": "mybusiness.googleLocations.search",
          "path": "v4/googleLocations:search",
          "flatPath": "v4/googleLocations:search",
          "httpMethod": "POST",
          "parameters": {
          },
          "parameterOrder": [
          ],
          "request": {
            "$ref": "SearchGoogleLocationsRequest"
          },
          "response": {
            "$ref": "SearchGoogleLocationsResponse"
          },
          "description": "Search all of the possible locations that are a match to the specified\nrequest."
        },
        "report": {
          "id": "mybusiness.googleLocations.report",
          "path": "v4/{+name}:report",
          "flatPath": "v4/googleLocations/{googleLocationsId}:report",
          "httpMethod": "POST",
          "parameters": {
            "name": {
              "description": "Resource name of a [GoogleLocation], in the format\n`googleLocations\/{googleLocationId}`.",
              "location": "path",
              "required": true,
              "pattern": "^googleLocations\/[^\/]+$",
              "type": "string"
            }
          },
          "parameterOrder": [
            "name"
          ],
          "request": {
            "$ref": "ReportGoogleLocationRequest"
          },
          "response": {
            "$ref": "Empty"
          },
          "description": "Report a GoogleLocation."
        }
      }
    },
    "chains": {
      "methods": {
        "get": {
          "id": "mybusiness.chains.get",
          "path": "v4/{+name}",
          "flatPath": "v4/chains/{chainsId}",
          "httpMethod": "GET",
          "parameters": {
            "name": {
              "description": "The chain's resource name, in the format `chains\/{chain_place_id}`.",
              "location": "path",
              "required": true,
              "pattern": "^chains\/[^\/]+$",
              "type": "string"
            }
          },
          "parameterOrder": [
            "name"
          ],
          "response": {
            "$ref": "Chain"
          },
          "description": "Gets the specified chain. Returns `NOT_FOUND` if the\nchain does not exist."
        },
        "search": {
          "id": "mybusiness.chains.search",
          "path": "v4/chains:search",
          "flatPath": "v4/chains:search",
          "httpMethod": "GET",
          "parameters": {
            "chainDisplayName": {
              "description": "Search for a chain by its name.\nExact\/partial\/fuzzy\/related queries are supported.\nExamples: \"walmart\", \"wal-mart\", \"walmmmart\", \"\u6C83\u5C14\u739B\"",
              "location": "query",
              "type": "string"
            },
            "resultCount": {
              "description": "The maximum number of matched chains to return from this query.\nThe default is 10. The maximum possible value is 500.",
              "location": "query",
              "type": "integer",
              "format": "int32"
            }
          },
          "parameterOrder": [
          ],
          "response": {
            "$ref": "SearchChainsResponse"
          },
          "description": "Searches the chain based on chain name."
        }
      }
    },
    "attributes": {
      "methods": {
        "list": {
          "id": "mybusiness.attributes.list",
          "path": "v4/attributes",
          "flatPath": "v4/attributes",
          "httpMethod": "GET",
          "parameters": {
            "name": {
              "description": "Resource name of the location to look up available attributes.",
              "location": "query",
              "type": "string"
            },
            "categoryId": {
              "description": "The primary category stable ID to find available attributes.",
              "location": "query",
              "type": "string"
            },
            "country": {
              "description": "The ISO 3166-1 alpha-2 country code to find available attributes.",
              "location": "query",
              "type": "string"
            },
            "languageCode": {
              "description": "The BCP 47 code of language to get attribute display names in. If this\nlanguage is not available, they will be provided in English.",
              "location": "query",
              "type": "string"
            },
            "pageSize": {
              "description": "How many attributes to include per page. Default is 200, minimum is 1.",
              "location": "query",
              "type": "integer",
              "format": "int32"
            },
            "pageToken": {
              "description": "If specified, the next page of attribute metadata is retrieved. The\n`pageToken` is returned when a call to `attributes.list` returns more\nresults than can fit into the requested page size.",
              "location": "query",
              "type": "string"
            }
          },
          "parameterOrder": [
          ],
          "response": {
            "$ref": "ListAttributeMetadataResponse"
          },
          "description": "Returns the list of available attributes that would be available for a\nlocation with the given primary category and country."
        }
      }
    }
  },
  "basePath": ""
}