---
title: "Call the generateDocument MCP tool"
method: POST
path: "/api/v1/actions/generateDocument"
tags: ["Actions"]
---

# Call the generateDocument MCP tool

`POST /api/v1/actions/generateDocument`

## Request

- Base URL: `https://app.reachium.io`
- URL: `https://app.reachium.io/api/v1/actions/generateDocument`
- Auth: HTTP bearer

Generate a SHORT lead-magnet document from an existing post's topic (about 20 to 40 seconds), insert it into this workspace's documents and link it to the post. Longer documents are written in the Documents area of the app. It spends credits (check the balance with getCreditBalance). Needs a booking link on the brand profile, or pass booking_url. Send idempotency_key (8 to 200 characters) and reuse the same key on a retry after a timeout: a retry with the same key returns the first result, or a conflict telling you to check the result in the app. Returns document_id, ui_url and the artifact ids (read them with getArtifact).

Called through the Actions bridge: the response is that tool's own result, wrapped as `{ data: <tool result> }` under HTTP 200. Billing, daily-cap, and confirm-step outcomes are embedded INSIDE `data`, never remapped to an HTTP status (see the templated `/api/v1/actions/{toolName}` operation above for the full protocol, and `x-mcp-actions` for this tool's machine-readable scope/cap/confirm_behavior fields). Authentication, request-shape, and optional idempotency-protocol failures still use their documented non-200 statuses.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `post_id` string, uuid, required: The post whose topic seeds the document.
  - `booking_url` string: Booking/calendar URL for the document CTAs. Omit to use the brand profile calendar link.
  - `idempotency_key` string: Optional. Send the same key on a retry to get the first result back instead of generating (and charging) again. 8 to 200 characters: letters, digits, dot, underscore, colon, hyphen. A stored refusal is returned too; use a new key for a fresh attempt.

## Response `200`

The result of calling this tool.

- object
  - `data` unknown, required
  - `error` unknown, required

## Other responses

- `400`: The request body was not a JSON object (code invalid_request), or Idempotency-Key is malformed (code invalid_idempotency_key).
- `401`: Missing or invalid API key. Send `Authorization: Bearer rmcp_...` (code unauthorized).
- `403`: This tool is out of the key’s granted scope (code insufficient_scope).
- `409`: This Idempotency-Key has an unresolved in-flight or ambiguous result (code request_in_flight). Reconcile before using a new key.
- `422`: This Idempotency-Key was already used with a different request body (code idempotency_key_reuse).
- `429`: Rate limited: shared `mcp:ip:{ip}` (600/60s) or `mcp:key:{keyId}` (120/60s) bucket, the SAME buckets the MCP endpoint uses (code rate_limited).
- `500`: Unhandled server error (code internal_error).

---

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