---
title: "Replace services"
method: PUT
path: "/v1/accounts/{accountId}/gmb-services"
tags: ["GMB Services"]
---

# Replace services

`PUT /v1/accounts/{accountId}/gmb-services`

## Request

- Base URL: `https://zernio.com/api`
- URL: `https://zernio.com/api/v1/accounts/{accountId}/gmb-services`
- Auth: HTTP bearer

Replaces the entire service list for a location.
Google's API requires full replacement; individual item updates are not supported.
Each service can be structured (using a predefined serviceTypeId) or free-form (custom label).

## Path parameters

- `accountId` string, required

## Query parameters

- `locationId` string

## Request body

- object
  - `serviceItems` object[], required
    - `structuredServiceItem` object: Exactly one of structuredServiceItem or freeFormServiceItem is required per item (enforced server-side; not modeled as oneOf because required-only oneOf branches break SDK generators).
      - `serviceTypeId` string, required
      - `description` string
    - `freeFormServiceItem` object
      - `category` string, required
      - `label` object, required
        - `displayName` string, required
        - `description` string
        - `languageCode` string
    - `price` object
      - `currencyCode` string
      - `units` string
      - `nanos` integer

## Response `200`

Services updated successfully

- object
  - `success` boolean
  - `services` object[]

## Other responses

- `400`: Invalid request
- `401`: Unauthorized

## Changes

- **2026-10-06** `f8c8f34fb41a`: 2 warning
  - added the new `account` enum value to the `details/budgetScope` response property for the response status `400`
  - added the new `account` enum value to the `details/budgetScope` response property for the response status `401`
- **2026-10-02** `d556591af3f6`: 2 info
  - added the optional property `docUrl` to the response with the `400` status
  - added the optional property `docUrl` to the response with the `401` status
- **2026-09-30** `16a7b9d5373e`: 2 info
  - removed the `platform` enum value from the `details/budgetScope` response property for the response status `400`
  - removed the `platform` enum value from the `details/budgetScope` response property for the response status `401`
- **2026-09-25** `2c04683ce694`: 8 info
  - added the optional property `details/adAccountId` to the response with the `400` status
  - added the optional property `details/adAccountId` to the response with the `401` status
  - added the optional property `details/createdObjects` to the response with the `400` status
  - added the optional property `details/createdObjects` to the response with the `401` status
  - …4 more
- **2026-09-16** `3e6ddf2a99ea`: 2 info
  - added the optional property `details/budgetScope` to the response with the `400` status
  - added the optional property `details/budgetScope` to the response with the `401` status

[Operation history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/accounts/:accountId/gmb-services/put.md)

---

[API](https://skmtc.dev/zernio/apis/zernio-api.md) · [All operations](https://skmtc.dev/zernio/apis/zernio-api/llms.txt) · [OpenAPI document](https://skmtc.dev/zernio/apis/zernio-api/revisions/4e74db179e73?raw)
