---
title: "Dry-run a campaign draft against the platform rules"
method: POST
path: "/api/v1/tools/validate_campaign_draft/execute"
tags: ["Adako"]
---

# Dry-run a campaign draft against the platform rules

`POST /api/v1/tools/validate_campaign_draft/execute`

## Request

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

Checks a campaign draft field by field against Adako's spec for that platform and campaign type, and returns every problem with a severity and what to do about it. Pure dry run: it contacts no platform, changes nothing and costs nothing.
Catches: missing required fields, text over the character limit, lists with too few or too many items, budgets under the platform floor, objective and optimisation-goal pairings the platform refuses, ids passed as numbers, money that looks like micros or cents, and place or interest names where an id belongs.
Budget floors: pass currency (the ad account's ISO code, from list_connected_accounts or the account read). The floors Adako knows offline are USD figures, so they are enforced for USD only; in any other or unknown currency the draft is not told it clears the floor — the create tool's preview checks the account's own minimum.
Use when: you have assembled a draft and before you call any create tool. Run it again after fixing, until there are no blockers.
When not to use: you do not have a draft yet — call get_campaign_spec to learn what to ask the user for.
Returns per-field issues (blocker / warning / note) and the resolver or tool to call next. A clean result means the draft satisfies the rules Adako knows; the platform is still the final judge, so a create can still be rejected for policy or account state.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `arguments` object, required
    - `platform` 'google_ads' | 'meta_ads' | 'chatgpt_ads' | 'tiktok_ads' | 'linkedin_ads', required: Which ad platform the draft is for.
    - `campaign_type` string, required: Campaign type, e.g. search, image, video, carousel, chat_card.
    - `draft` object, required: The draft campaign as an object: the arguments you intend to pass to the create tool.
    - `currency` string: ISO 4217 code of the ad account currency, e.g. USD, EUR, JPY. Omit when unknown: USD budget floors are then not enforced, and large whole numbers are only flagged as possible micros.

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