---
title: "Schedule a recurring performance brief by email"
method: POST
path: "/api/v1/tools/schedule_brief/execute"
tags: ["Adako"]
---

# Schedule a recurring performance brief by email

`POST /api/v1/tools/schedule_brief/execute`

## Request

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

Sets up a daily or weekly brief composed from Adako's synced data and emailed to the operator. Adako settings only; nothing on the ad platform changes.
Use when: the user asks for a recurring summary ("every Monday", "each morning"). Confirm the cadence, the hour and the timezone before saving; the timezone defaults to UTC, so ask for it rather than relying on the default.
Do not use when: the user wants one report right now — that is generate_report_now.
The brief compares the period with the one before it: a daily brief covers yesterday against the day before, a weekly one the last 7 days against the previous 7. The evaluation job runs once a day, so the hour schedules the day rather than the minute: the brief goes out on the first daily pass at or after your hour.
report_type is saved with the schedule and every run composes that type: performance_brief (the default: totals, per account, top campaigns), detailed_analysis (adds the biggest movers), executive_summary (totals and a few lines).
Returns the schedule in plain words and when it will first run.
If you are unsure which accounts, cadence or period the user means, ask rather than guessing.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `arguments` object, required
    - `cadence` 'daily' | 'weekly', required: How often the brief goes out.
    - `weekday` integer: Weekly only: 0 = Sunday … 6 = Saturday. Default Monday (1).
    - `hour` integer: Local hour, 0–23. Default 7.
    - `timezone` string: IANA timezone, for example Europe/Warsaw or America/New_York. Defaults to UTC; ask the user for theirs rather than guessing.
    - `platforms` string[]: Which platforms to cover. Leave empty for every platform with an active account.
    - `account_ids` string[]: Platform account ids to cover. Leave empty for every active account.
    - `delivery_email` string, email: Where to send it. Defaults to the account owner’s email. Any other address gets a confirmation link first, and the brief goes to the owner’s email until someone at that address confirms.
    - `report_type` 'performance_brief' | 'detailed_analysis' | 'executive_summary': performance_brief: totals, per account and the top campaigns. detailed_analysis: adds the biggest movers. executive_summary: totals and three lines, nothing else.

## 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)
