---
title: "Set a campaign ad schedule"
method: POST
path: "/api/v1/tools/google_set_ad_schedule/execute"
tags: ["Google Ads"]
---

# Set a campaign ad schedule

`POST /api/v1/tools/google_set_ad_schedule/execute`

## Request

- Base URL: `https://adako.ai`
- URL: `https://adako.ai/api/v1/tools/google_set_ad_schedule/execute`
- Auth: HTTP bearer

Replaces a campaign's whole ad schedule with the blocks you pass. Google has no way to edit one block, so the old schedule is removed and the new one created in the same atomic change.
Use when: the user wants the campaign to run only at certain times, or to bid differently at certain times, and you have looked at google_get_hourly_performance so the decision is based on something.
Do not use when: the campaign has little data. Turning ads off for two-thirds of the week on a hunch is the fastest way to make a campaign stop learning, and a Smart Bidding campaign already handles time of day itself — a schedule then mostly removes volume.
**Any day you do not list becomes a day the campaign does not serve.** The preview says exactly which days go dark.
Hours are in the account timezone. Blocks may not overlap and may not cross midnight; a 22:00–02:00 window is two blocks on two days.
If you are unsure which account, campaign or period the user means, ask them — do not guess ids or dates.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `arguments` object, required
    - `customer_id` string: Google Ads customer id (10 digits, dashes optional). Omit to use the primary account; list_connected_accounts shows the valid ids.
    - `campaign_id` string, required: Campaign id as returned by google_list_campaigns.
    - `schedule` object[], required: The complete weekly schedule. This replaces whatever is there now: any day not listed becomes a day the campaign does not serve.
      - `day` 'MONDAY' | 'TUESDAY' | 'WEDNESDAY' | 'THURSDAY' | 'FRIDAY' | 'SATURDAY' | 'SUNDAY', required: Day of the week.
      - `start_hour` integer, required: First hour the ads may serve (0–23).
      - `end_hour` integer, required: Hour the block ends (1–24). 24 means midnight.
      - `start_minute` 'ZERO' | 'FIFTEEN' | 'THIRTY' | 'FORTY_FIVE': Minute within start_hour. Defaults to ZERO.
      - `end_minute` 'ZERO' | 'FIFTEEN' | 'THIRTY' | 'FORTY_FIVE': Minute within end_hour. Defaults to ZERO.
      - `bid_modifier` number: Optional bid multiplier for this block.
    - `idempotency_key` string: Optional caller-supplied key; identical keys never execute twice.

## Response `200`

The tool ran. A write returns proposal_id and approve_url while the change waits for approval.

- SuccessEnvelope
  - `success` unknown, required
  - `tool` string, required
  - `data` object, required: Machine-readable result.
  - `markdown` string, required: The same result written for a person or a model.
  - `quota` Quota: Task usage for the current billing period.
    - `plan` string
    - `used` integer
    - `limit` integer
    - `period_end` string
    - `upgrade_url` string
  - `proposal_id` string: Present for writes. Nothing changes on the ad platform until it is approved.
  - `approve_url` string: Where a person approves the proposal.
  - `request_id` string, required

## Other responses

- `400`: Invalid arguments, or the ad account could not be resolved.
- `401`: Missing, invalid, revoked or expired API key.
- `402`: Monthly task quota used up, or the plan does not include this tool.
- `403`: The connected ad account lacks the access level this tool needs.
- `404`: Unknown tool name.
- `409`: Not connected, reconnect needed, confirmation required, a proposal already pending or no longer pending, an identical create that failed earlier today (proposal_failed_before), a create that duplicates an approved one (duplicate_create), the ad-account limit of the plan reached (account_limit), or an Idempotency-Key reused with different arguments.
- `429`: Rate limited by Adako or by the ad platform. See Retry-After.
- `500`: Unexpected error inside Adako.
- `502`: The ad platform returned an error.

---

[API](https://skmtc.dev/adako/apis/adako-rest-api.md) · [All operations](https://skmtc.dev/adako/apis/adako-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/adako/apis/adako-rest-api/revisions/59ee60d48a56?raw)
