> ## Documentation Index
> Fetch the complete documentation index at: https://docs.social-api.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Update a Google Business Profile location

> Writes the location's public profile: name, description, phone numbers, address, website, categories, opening hours, service area. Only the fields you send are touched. A field you omit is left as it is, and a field you send with an empty value is CLEARED, which is how you remove a phone number or a website. Fields Google owns are not writable and are rejected: place_id, maps_uri, new_review_uri and the status flags are output-only, and language_code is fixed when the location is created. Google moderates these edits, so a 200 means the change was accepted for review rather than already live on Search and Maps; read the location back to see what is live and check has_pending_edits. Google allows 10 edits per minute per Business Profile and that limit cannot be raised. Pass validate_only=true to have Google check the change without applying it, which is the only way to test against a real profile since the API has no sandbox.



## OpenAPI

````yaml /api-reference/openapi.json put /platforms/google/accounts/{id}
openapi: 3.0.0
info:
  description: >-
    Unified social media inbox API. Read and respond to comments, DMs, reviews,
    and mentions across Instagram, Facebook, Threads, Google Business Profile,
    TikTok, LinkedIn, and YouTube through a single REST API. X/Twitter and
    Trustpilot coming soon.
  title: SocialAPI.AI
  contact:
    name: SocialAPI.AI Support
    email: support@social-api.ai
  license:
    name: MIT
  version: '1.0'
servers:
  - url: https://api.social-api.ai/v1
security: []
paths:
  /platforms/google/accounts/{id}:
    put:
      tags:
        - Google
      summary: Update a Google Business Profile location
      description: >-
        Writes the location's public profile: name, description, phone numbers,
        address, website, categories, opening hours, service area. Only the
        fields you send are touched. A field you omit is left as it is, and a
        field you send with an empty value is CLEARED, which is how you remove a
        phone number or a website. Fields Google owns are not writable and are
        rejected: place_id, maps_uri, new_review_uri and the status flags are
        output-only, and language_code is fixed when the location is created.
        Google moderates these edits, so a 200 means the change was accepted for
        review rather than already live on Search and Maps; read the location
        back to see what is live and check has_pending_edits. Google allows 10
        edits per minute per Business Profile and that limit cannot be raised.
        Pass validate_only=true to have Google check the change without applying
        it, which is the only way to test against a real profile since the API
        has no sandbox.
      parameters:
        - description: Connected account ID
          name: id
          in: path
          required: true
          schema:
            type: string
        - description: Validate the change without applying it
          name: validate_only
          in: query
          schema:
            type: boolean
      requestBody:
        content:
          application/json:
            schema:
              $ref: >-
                #/components/schemas/social-api_ai_core_api_connectors_base.GBPLocationUpdate
        description: Fields to change
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/api_endpoints.UpdateGoogleLocationResponse
        '401':
          description: Invalid or missing API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_endpoints.ErrorResponse'
        '404':
          description: Unknown account
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_endpoints.ErrorResponse'
        '422':
          description: No updatable field set, or a value Google rejected
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_endpoints.ErrorResponse'
        '429':
          description: Google's 10 edits per minute per profile exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_endpoints.ErrorResponse'
        '502':
          description: Upstream Google API error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/api_endpoints.ErrorResponse'
      security:
        - BearerAuth: []
components:
  schemas:
    social-api_ai_core_api_connectors_base.GBPLocationUpdate:
      type: object
      properties:
        ad_phone:
          description: AdPhone is the alternate number shown on Google Ads extensions.
          type: string
        categories:
          $ref: >-
            #/components/schemas/social-api_ai_core_api_connectors_base.GBPCategoriesUpdate
        description:
          type: string
          example: Wood-fired pizza since 1998
        labels:
          type: array
          items:
            type: string
        latlng:
          $ref: >-
            #/components/schemas/social-api_ai_core_api_connectors_base.GBPLatLng
        more_hours:
          type: array
          items:
            $ref: >-
              #/components/schemas/social-api_ai_core_api_connectors_base.GBPMoreHours
        open_status:
          description: OpenStatus is OPEN, CLOSED_PERMANENTLY or CLOSED_TEMPORARILY.
          type: string
          example: OPEN
        phone_numbers:
          $ref: >-
            #/components/schemas/social-api_ai_core_api_connectors_base.GBPPhoneNumbersUpdate
        regular_hours:
          $ref: >-
            #/components/schemas/social-api_ai_core_api_connectors_base.GBPHoursUpdate
        service_area:
          $ref: >-
            #/components/schemas/social-api_ai_core_api_connectors_base.GBPServiceAreaUpdate
        special_hours:
          $ref: >-
            #/components/schemas/social-api_ai_core_api_connectors_base.GBPSpecialHoursUpdate
        store_code:
          type: string
          example: JP-01
        storefront_address:
          $ref: >-
            #/components/schemas/social-api_ai_core_api_connectors_base.GBPAddressUpdate
        title:
          type: string
          example: Joe's Pizza (Downtown)
        website_uri:
          type: string
          example: https://joes.example
    api_endpoints.UpdateGoogleLocationResponse:
      type: object
      properties:
        data:
          $ref: >-
            #/components/schemas/social-api_ai_core_api_connectors_base.GBPLocationDetails
        validated:
          description: >-
            Validated is true when the request ran with validate_only, meaning
            Google

            accepted the change as valid and wrote nothing. Data is empty in
            that case.
          type: boolean
    api_endpoints.ErrorResponse:
      type: object
      properties:
        error:
          $ref: '#/components/schemas/api_endpoints.ErrorBody'
    social-api_ai_core_api_connectors_base.GBPCategoriesUpdate:
      type: object
      properties:
        additional_categories:
          description: >-
            AdditionalCategories replaces the whole list: Google has no way to
            add or

            remove a single category, so a partial list drops the rest.
          type: array
          items:
            type: string
        primary_category:
          type: string
          example: categories/gcid:pizza_restaurant
    social-api_ai_core_api_connectors_base.GBPLatLng:
      type: object
      properties:
        latitude:
          type: number
          example: 48.8566
        longitude:
          type: number
          example: 2.3522
    social-api_ai_core_api_connectors_base.GBPMoreHours:
      type: object
      properties:
        hours_type_id:
          type: string
          example: DRIVE_THROUGH
        periods:
          type: array
          items:
            $ref: >-
              #/components/schemas/social-api_ai_core_api_connectors_base.GBPTimePeriod
    social-api_ai_core_api_connectors_base.GBPPhoneNumbersUpdate:
      type: object
      properties:
        additional_phones:
          description: AdditionalPhones replaces the whole list; an empty list clears it.
          type: array
          items:
            type: string
        primary_phone:
          type: string
          example: +33 1 23 45 67 89
    social-api_ai_core_api_connectors_base.GBPHoursUpdate:
      type: object
      properties:
        periods:
          type: array
          items:
            $ref: >-
              #/components/schemas/social-api_ai_core_api_connectors_base.GBPTimePeriod
    social-api_ai_core_api_connectors_base.GBPServiceAreaUpdate:
      type: object
      properties:
        business_type:
          description: >-
            BusinessType is CUSTOMER_LOCATION_ONLY or
            CUSTOMER_AND_BUSINESS_LOCATION.
          type: string
          example: CUSTOMER_LOCATION_ONLY
        place_ids:
          description: PlaceIDs replaces the covered areas, as Google place ids.
          type: array
          items:
            type: string
    social-api_ai_core_api_connectors_base.GBPSpecialHoursUpdate:
      type: object
      properties:
        periods:
          type: array
          items:
            $ref: >-
              #/components/schemas/social-api_ai_core_api_connectors_base.GBPSpecialHourPeriod
    social-api_ai_core_api_connectors_base.GBPAddressUpdate:
      type: object
      properties:
        address_lines:
          type: array
          items:
            type: string
        administrative_area:
          type: string
        locality:
          type: string
          example: Paris
        organization:
          type: string
        postal_code:
          type: string
          example: '75001'
        region_code:
          type: string
          example: FR
        sorting_code:
          type: string
        sublocality:
          type: string
    social-api_ai_core_api_connectors_base.GBPLocationDetails:
      type: object
      properties:
        ad_phone:
          description: AdPhone is the alternate number shown on Google Ads extensions.
          type: string
        additional_categories:
          type: array
          items:
            $ref: >-
              #/components/schemas/social-api_ai_core_api_connectors_base.GBPCategory
        additional_phones:
          type: array
          items:
            type: string
        can_delete:
          description: >-
            Capability flags, pointers for the same reason as the status flags
            above.
          type: boolean
        can_have_business_calls:
          type: boolean
        can_have_food_menus:
          type: boolean
        can_modify_service_list:
          type: boolean
        can_operate_health_data:
          type: boolean
        can_operate_local_post:
          type: boolean
        can_operate_lodging_data:
          type: boolean
        can_reopen:
          description: >-
            CanReopen is set on a temporarily closed location that can be
            reopened.
          type: boolean
        duplicate_location:
          description: >-
            DuplicateLocation names the location this one was flagged a
            duplicate of.
          type: string
        has_google_updated:
          type: boolean
        has_pending_edits:
          type: boolean
        has_voice_of_merchant:
          description: >-
            Status flags, pointers so the three states stay distinct: true, an

            explicit false from Google, and absent because Google said nothing.

            A plain bool with omitempty collapses the last two, which would
            report a

            location as lacking a capability we were never actually told about.


            HasVoiceOfMerchant is the one that matters operationally: when it is

            false the merchant does not currently control the profile, and
            posting

            or replying fails until they resolve it in Google Business Profile.
          type: boolean
        is_particularly_personal_place:
          type: boolean
        labels:
          type: array
          items:
            type: string
        language_code:
          type: string
          example: en
        latlng:
          $ref: >-
            #/components/schemas/social-api_ai_core_api_connectors_base.GBPLatLng
        maps_uri:
          description: MapsURI is the location's Google Maps page.
          type: string
          example: https://maps.google.com/?cid=123
        more_hours:
          type: array
          items:
            $ref: >-
              #/components/schemas/social-api_ai_core_api_connectors_base.GBPMoreHours
        new_review_uri:
          description: |-
            NewReviewURI is the short link that opens the review form for this
            location, for review-request campaigns.
          type: string
          example: https://g.page/r/abc/review
        open_status:
          description: OpenStatus is OPEN, CLOSED_PERMANENTLY or CLOSED_TEMPORARILY.
          type: string
          example: OPEN
        opening_date:
          description: OpeningDate is set on a location that has not opened yet.
          type: string
          example: '2026-09-01'
        place_id:
          description: >-
            PlaceID is the standard Google Places identifier, so a location can
            be

            joined to Places, Maps and Geocoding results.
          type: string
          example: ChIJabc
        primary_category:
          $ref: >-
            #/components/schemas/social-api_ai_core_api_connectors_base.GBPCategory
        primary_phone:
          type: string
          example: +33 1 23 45 67 89
        regular_hours:
          type: array
          items:
            $ref: >-
              #/components/schemas/social-api_ai_core_api_connectors_base.GBPTimePeriod
        relationship_data:
          $ref: >-
            #/components/schemas/social-api_ai_core_api_connectors_base.GBPRelationshipData
        service_area:
          $ref: >-
            #/components/schemas/social-api_ai_core_api_connectors_base.GBPServiceArea
        service_items:
          type: array
          items:
            $ref: >-
              #/components/schemas/social-api_ai_core_api_connectors_base.GBPServiceItem
        special_hours:
          type: array
          items:
            $ref: >-
              #/components/schemas/social-api_ai_core_api_connectors_base.GBPSpecialHourPeriod
        store_code:
          type: string
          example: JP-01
        storefront_address:
          $ref: >-
            #/components/schemas/social-api_ai_core_api_connectors_base.GBPPostalAddress
        website_uri:
          type: string
          example: https://joes.example
    api_endpoints.ErrorBody:
      type: object
      properties:
        code:
          type: string
          example: resource.not_found
        message:
          type: string
          example: Account not found
        meta:
          type: object
          additionalProperties: {}
    social-api_ai_core_api_connectors_base.GBPTimePeriod:
      type: object
      properties:
        close_day:
          type: string
          example: MONDAY
        close_time:
          type: string
          example: '17:30'
        open_day:
          type: string
          example: MONDAY
        open_time:
          type: string
          example: '09:00'
    social-api_ai_core_api_connectors_base.GBPSpecialHourPeriod:
      type: object
      properties:
        close_time:
          type: string
        closed:
          description: >-
            Closed marks the location shut for the whole period, in which case
            the

            times are absent. A pointer so "Google did not say" stays distinct
            from

            an explicit "not closed".
          type: boolean
        end_date:
          type: string
          example: '2026-12-25'
        open_time:
          type: string
        start_date:
          type: string
          example: '2026-12-25'
    social-api_ai_core_api_connectors_base.GBPCategory:
      type: object
      properties:
        display_name:
          type: string
          example: Pizza restaurant
        name:
          type: string
          example: categories/gcid:pizza_restaurant
    social-api_ai_core_api_connectors_base.GBPRelationshipData:
      type: object
      properties:
        children_locations:
          type: array
          items:
            $ref: >-
              #/components/schemas/social-api_ai_core_api_connectors_base.GBPRelevantLocation
        parent_chain:
          type: string
        parent_location:
          $ref: >-
            #/components/schemas/social-api_ai_core_api_connectors_base.GBPRelevantLocation
    social-api_ai_core_api_connectors_base.GBPServiceArea:
      type: object
      properties:
        business_type:
          description: >-
            BusinessType is CUSTOMER_LOCATION_ONLY or
            CUSTOMER_AND_BUSINESS_LOCATION.
          type: string
          example: CUSTOMER_LOCATION_ONLY
        places:
          type: array
          items:
            $ref: >-
              #/components/schemas/social-api_ai_core_api_connectors_base.GBPPlaceInfo
        region_code:
          type: string
          example: FR
    social-api_ai_core_api_connectors_base.GBPServiceItem:
      type: object
      properties:
        free_form_service_item:
          $ref: >-
            #/components/schemas/social-api_ai_core_api_connectors_base.GBPFreeFormService
        price:
          $ref: '#/components/schemas/social-api_ai_core_api_connectors_base.GBPMoney'
        structured_service_item:
          $ref: >-
            #/components/schemas/social-api_ai_core_api_connectors_base.GBPStructuredService
    social-api_ai_core_api_connectors_base.GBPPostalAddress:
      type: object
      properties:
        address_lines:
          type: array
          items:
            type: string
        administrative_area:
          type: string
          example: Île-de-France
        locality:
          type: string
          example: Paris
        organization:
          type: string
        postal_code:
          type: string
          example: '75001'
        region_code:
          type: string
          example: FR
        sorting_code:
          type: string
        sublocality:
          type: string
    social-api_ai_core_api_connectors_base.GBPRelevantLocation:
      type: object
      properties:
        place_id:
          type: string
        relation_type:
          type: string
          example: DEPARTMENT_OF
    social-api_ai_core_api_connectors_base.GBPPlaceInfo:
      type: object
      properties:
        place_id:
          type: string
        place_name:
          type: string
          example: Paris
    social-api_ai_core_api_connectors_base.GBPFreeFormService:
      type: object
      properties:
        category:
          type: string
        label:
          $ref: '#/components/schemas/social-api_ai_core_api_connectors_base.GBPLabel'
    social-api_ai_core_api_connectors_base.GBPMoney:
      type: object
      properties:
        currency_code:
          type: string
          example: EUR
        nanos:
          description: |-
            Nanos is a pointer because zero is a real value: a price of exactly
            80.00 EUR has no fractional part, and omitempty would drop it.
          type: integer
        units:
          type: string
          example: '80'
    social-api_ai_core_api_connectors_base.GBPStructuredService:
      type: object
      properties:
        description:
          type: string
        service_type_id:
          type: string
    social-api_ai_core_api_connectors_base.GBPLabel:
      type: object
      properties:
        description:
          type: string
        display_name:
          type: string
          example: Emergency unlock
        language_code:
          type: string
          example: en
  securitySchemes:
    BearerAuth:
      description: >-
        Prefix your API key with "Bearer ". Example: `Authorization: Bearer
        sapi_key_...`
      type: apiKey
      name: Authorization
      in: header

````