---
title: "Check draft"
method: POST
path: "/api/v1/tools/check_draft"
tags: ["default"]
---

# Check draft

`POST /api/v1/tools/check_draft`

## Request

- Base URL: `https://www.affiliatespy.io`
- URL: `https://www.affiliatespy.io/api/v1/tools/check_draft`
- Auth: HTTP bearer

Quality hints for an email draft, the same check the dashboard's editor and Inbox composer show: judged against the campaign's offer (or, without campaign_id, the project's program and the autopilot offer). Hints, up to 3: Reads as a template, Promises something not in your offer, Mentions a fee, Not safe to send without edits, Nothing specific about this creator. Pass the rendered email (preview_campaign_step gives it), not {{tokens}}. Read-only.

## Request body

- object
  - `body` string, required: The email body as it would be sent.
  - `subject` string: Omit for a reply in an existing thread.
  - `campaign_id` string, uuid: A campaign id from list_campaigns.
  - `app_id` string, uuid: Project id from list_apps. Omit to use your most recently added project.

## Response `200`

The tool's JSON result (same payload the MCP tool returns).

- unknown

## Other responses

- `400`: Arguments failed validation; body lists the issues.
- `401`: Missing or invalid API key.
- `403`: Guarded tool with Unrestricted MCP off.
- `429`: Rate limited (60 requests per minute per key).

---

[API](https://skmtc.dev/affiliatespy/apis/affiliatespy-api.md) · [All operations](https://skmtc.dev/affiliatespy/apis/affiliatespy-api/llms.txt) · [OpenAPI document](https://skmtc.dev/affiliatespy/apis/affiliatespy-api/revisions/0300d370b356?raw)
