---
title: "Replace a campaign's ad schedule (dayparting)"
method: PUT
path: "/v1/ads/campaigns/{campaignId}/ad-schedule"
tags: ["Ad Campaigns"]
---

# Replace a campaign's ad schedule (dayparting)

`PUT /v1/ads/campaigns/{campaignId}/ad-schedule`

Replaces the campaign's whole ad schedule with the windows you send. This is a
REPLACE, not a merge: windows you leave out stop serving.

Send `schedule: []` to clear dayparting, which returns the campaign to serving around
the clock.

Google rules enforced here, so you get a named field instead of a criterion error:
at most 6 windows per day, a window must end after it starts, windows on the same day
may not overlap, `endHour` 24 is midnight and cannot carry minutes, and minutes are
quarter-hours only (0, 15, 30, 45). `bidModifier` is 0.1-10.0; Google's 0 means
"off" for devices only, so a window is switched off by leaving it out.

Windows are half-open (Google is exclusive of the end minute), so 09:00-12:00 and
12:00-17:00 on the same day are adjacent and both valid.

Google cannot edit an ad schedule in place (every AdScheduleInfo field is prohibited on
update), so this removes the live criteria and creates the new ones in a single atomic
mutate. The response is read back from Google and carries the new criterion ids.

## Path parameters

- `campaignId` string, required

## Request body

- object
  - `schedule` object[], required — The complete set of windows. Required, so clearing the schedule is always deliberate rather than an omission.
    - `dayOfWeek` 'MONDAY' | 'TUESDAY' | 'WEDNESDAY' | 'THURSDAY' | 'FRIDAY' | 'SATURDAY' | 'SUNDAY', required
    - `startHour` integer, required
    - `startMinute` 0 | 15 | 30 | 45 — Quarter-hours only.
    - `endHour` integer, required — 24 means midnight at the end of the day.
    - `endMinute` 0 | 15 | 30 | 45 — Quarter-hours only. Must be 0 when endHour is 24.
    - `bidModifier` number, nullable — Bid adjustment for this window. Null runs it at the campaign bid.

## Response `200`

The schedule as Google stored it

- object
  - `campaignId` string
  - `schedule` AdScheduleWindow[]
    - `criterionId` string — Google campaign criterion id. Changes whenever the window is rewritten, because Google cannot edit a schedule in place.
    - `resourceName` string
    - `dayOfWeek` 'MONDAY' | 'TUESDAY' | 'WEDNESDAY' | 'THURSDAY' | 'FRIDAY' | 'SATURDAY' | 'SUNDAY'
    - `startHour` integer
    - `startMinute` 0 | 15 | 30 | 45
    - `endHour` integer — 24 means midnight at the end of the day.
    - `endMinute` 0 | 15 | 30 | 45
    - `bidModifier` number, nullable — Bid adjustment for this window, 0.1-10.0. Null when the window runs at the campaign bid.
  - `servesAroundTheClock` boolean

## Other responses

- `400` — Invalid request
- `401` — Unauthorized
- `403` — Ads access required. Legacy plans need the Ads add-on; included by default on usage-based plans.
- `404` — The account or requested resource was not found or is not accessible. An account ID may have been disconnected and removed. Read GET /v1/accounts for current account IDs.
- `422` — The schedule breaks a Google rule: too many windows on a day, an overlap, a window that ends before it starts, minutes on hour 24, or a bid modifier outside 0.1-10.0.
- `501` — Not a Google Ads campaign: ad schedules are a Google criterion.

## Changes

- **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 `404` status
- **2026-09-15** `0dba7d004d75` — 4 info
  - added the optional property `details/quotaExhausted` to the response with the `400` status
  - added the optional property `details/quotaExhausted` to the response with the `404` status
  - added the optional property `details/quotaScope` to the response with the `400` status
  - added the optional property `details/quotaScope` to the response with the `404` status
- **2026-09-14** `a23eb241746a` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/zernio/apis/zernio-api/changes/v1/ads/campaigns/:campaignId/ad-schedule/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/dd3865482f9f?raw)
