---
title: "Compose a performance report now"
method: POST
path: "/api/v1/tools/generate_report_now/execute"
tags: ["Adako"]
---

# Compose a performance report now

`POST /api/v1/tools/generate_report_now/execute`

## Request

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

Composes a report from Adako's synced data and stores it, so it also has a permanent web page. Returns immediately — no platform calls, no waiting. Free.
Use when: the user asks how a period went, wants a summary to forward, or asks for "a report" or "a brief" — including when they name one platform, because this covers every connected account and keeps the page.
Prefer it over the per-platform performance tools whenever the answer is meant to be kept or sent on: those read one platform live and store nothing.
Do not use when: the user asks about today — today is still syncing; use the live performance tools for "right now".
report_type: performance_brief (totals, per account, top campaigns), detailed_analysis (adds the biggest movers), executive_summary (totals and a few lines).
Pass either date_range or start_date + end_date, never both. Every period is compared with the equally long period immediately before it.
Periods follow each account's own timezone and cover complete days only: a day that has not ended in an account's timezone is left out, and the report says when an account's days differ from the headline period.
Returns the report as markdown plus a link to its page. The user can email it to themselves from that page; for recurring delivery use schedule_brief.
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
    - `report_type` 'performance_brief' | 'detailed_analysis' | 'executive_summary', required: performance_brief: totals, per account and the top campaigns. detailed_analysis: adds the biggest movers. executive_summary: totals and three lines, nothing else.
    - `date_range` 'today' | 'yesterday' | 'last_7_days' | 'last_14_days' | 'last_30_days' | 'this_month' | 'last_month': Preset range. Alternatively pass start_date and end_date (YYYY-MM-DD). Never both.
    - `start_date` string
    - `end_date` string
    - `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: Recorded on the report as its intended recipient. On-demand sending happens from the report page; use schedule_brief for recurring email.
    - `raw_data` boolean: Return compact JSON only (no markdown). Use when you will compute on the result.

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