---
title: "replies.draft"
method: POST
path: "/v1/replies/draft"
tags: ["replies"]
---

# replies.draft

`POST /v1/replies/draft`

## Request

- Base URL: `https://api.selda.ai`
- URL: `https://api.selda.ai/v1/replies/draft`
- Auth: HTTP bearer

Write a reply draft into a lead's Sales Inbox thread. A person reviews and sends it in the app, this can send nothing.

Dispatched to `replies.draft` on `POST /mcp/mutate`. This route is a different URL for the same call: the request is answered by the same dispatcher, with the same authentication, the same scope check, the same organisation scoping and the same refusals.

- Scope: `write`
- A free sandbox key may call it
- MCP tools that wrap the same function: `selda_draft_reply`
- Filled in from your API key, never sent by you: `orgId`

## Request body

- object
  - `leadId` string, required
  - `body` string, required
  - `instruction` string: What the person asked for in their own words ("tee tästä lyhyempi"). Optional, kept only in the draft history beside the text, it changes nothing about what is stored in the composer. The `selda_draft_reply` tool schemas in `api/mcp.ts` and `mcp-server/index.ts` do not pass it yet, so this arrives empty on the tool path until they do.

## Response `200`

The call succeeded.

- object
  - `value` unknown, required
  - `request_id` string, required: Echoed in the `X-Request-Id` header.

## Other responses

- `400`: Unknown route, or arguments the validator refused.
- `401`: Missing, expired or revoked key.
- `403`: The key lacks the scope, the plan entitlement, or is a sandbox key on a live-only function.
- `429`: Rate limited. Wait for the next minute window and retry.
- `500`: The function threw. The message says what, without leaking internals.

---

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