> ## Documentation Index
> Fetch the complete documentation index at: https://docs.erdo.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Ad creative reviews

> Review ad copy and creative with the typed critic API and CLI.

# Ad creative reviews

Erdo's critic can review an ad as a typed creative brief. It evaluates the supplied copy and declared audience, and can use fetched destination-page and source evidence when those references are available. The review is advisory: each lens is marked `report_only`, and Erdo does not predict campaign performance or publish changes.

## Submit a review

Send the full request envelope to `POST /v1/critic/reviews`:

```json theme={null}
{
  "subject_kind": "ad",
  "ad": {
    "platform": "google_ads",
    "format": "responsive_search",
    "headlines": [{ "text": "Grow your pipeline", "pin": 1 }],
    "descriptions": [{ "text": "Talk to our team." }],
    "destination_url": "https://example.com/",
    "audience": "B2B founders",
    "register": "Direct and evidence-led",
    "sources": [{ "url": "https://example.com/customer-results" }]
  },
  "judges": ["judge-ad-register"]
}
```

Omit `judges` to run all approved ad lenses, including the four seeded lenses: `judge-ad-register`, `judge-ad-truthfulness`, `judge-ad-message-match`, and `judge-ad-platform-fit`. If supplied, every slug must name an approved ad judge; page judges are rejected.

Authenticate with your Erdo API key and organization, as with other `/v1` calls. Reviews use only records and assets the caller can access in that organization.

`platform` accepts `google_ads`, `meta_ads`, `linkedin_ads`, or `other`. `format` names the ad format. Supply the fields that apply to the platform: headline and description arrays support optional pin numbers; Meta-style inputs can use `primary_text`, `headline`, and `cta`; LinkedIn-style inputs can use `intro_text`, `headline`, and `cta`. `display_paths` and `images` are optional. An image uses `{ "url": "https://…" }` or `{ "asset_id": "attachment-uuid" }`. A source uses `{ "url": "https://…" }` or `{ "record_id": "record-uuid" }`. Use `destination_url` for an external page or `destination_artifact_id` for an Erdo page. `audience`, `register`, and `sources` provide context and references for judging.

The service fetches the destination snapshot and source text itself. The request does not accept caller-supplied snapshots. The response includes an overall summary, per-lens summaries and findings (`severity`, `issue`, `evidence`, and `suggested_rewrite`), plus evidence records for the destination, sources, and images. Evidence status is `available`, `missing`, or `unavailable`; a reason may be included when content could not be fetched. URL evidence also records `resolved_url`, the actual address after redirects, while `reference` preserves the submitted handle. Reviews report only what the supplied creative and retrieved evidence support. URL text is fetched without executing JavaScript; artifact snapshots use static HTML text. Empty app shells and inaccessible resources remain unavailable. Text is bounded to 20,000 characters per source, with truncation stated in the evidence reason. Requests allow up to eight images, eight sources and sixteen judge slugs.

Agents can call `review_artifact` with the same envelope; MCP clients use `erdo_review_artifact`. Review after drafting, then fix high-severity findings before proposing ad creation or mutation.

## Use the CLI

Save the complete request envelope as `ad.json`, then run:

```bash theme={null}
erdo critic review --file ad.json
```

The command prints the review summary and each lens finding. Add `--json` to print the complete response, including evidence records, for scripts and CI.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.