---
title: "Create a Gmail draft or threaded reply draft without attachments"
method: POST
path: "/v1/capabilities/google-workspace/gmail-drafts"
tags: ["Capability Sources"]
---

# Create a Gmail draft or threaded reply draft without attachments

`POST /v1/capabilities/google-workspace/gmail-drafts`

Creates a plain-text Gmail draft in the calling member own mailbox. For workspace attachments, use the openwork-cloud-uploads gmail_create_draft_with_attachments action so file bytes stay outside model context. Set threadId for replies and forwards. Always share the returned draftUrl.

## Request body

- object
  - `to` string, required — Recipient email address.
  - `cc` string — Optional comma-separated Cc email addresses.
  - `bcc` string — Optional comma-separated Bcc email addresses.
  - `subject` string, required — Draft subject line. For replies or forwards, include threadId; subjects starting with Re: or Fwd: are rejected without threadId so the draft stays on the existing conversation.
  - `body` string, required — Plain-text draft body. Write plain prose with no markdown syntax, separate paragraphs with blank lines, and do not hard-wrap prose. For threaded drafts, the server appends the quoted conversation automatically; do not include quoted history.
  - `threadId` string — Gmail thread id to reply on. Required for replies and forwards; get it from the gmail-messages capability. When set, the draft is attached to that thread as a reply — keep the thread's subject (e.g. 'Re: …').

## Response `200`

Draft created.

- GoogleWorkspaceDraftResponse
  - `ok` true, required
  - `draftId` string, required
  - `messageId` string, nullable, required
  - `draftUrl` string, nullable, required — Gmail URL for the ready-to-send draft. Always share draftUrl with the user so they can open the draft in Gmail for review and send.
  - `threadUrl` string, nullable, required — Gmail URL for the conversation thread when this draft is a threaded reply.
  - `to` string, required
  - `subject` string, required
  - `threadId` string, nullable, required
  - `quotedHistoryIncluded` boolean, required — True when quoted conversation history was included by the server or already present in the request body.
  - `attachments` object[]
    - `filename` string, required
    - `mimeType` string, required
    - `size` integer, required

## Other responses

- `400` — The draft request was invalid.
- `401` — The caller must be signed in.
- `409` — The calling member has not connected their Google account or is missing permission.
- `502` — Google rejected the request.

---

[API](https://skmtc.net/openworklabs/apis/den-api.md) · [All operations](https://skmtc.net/openworklabs/apis/den-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/openworklabs/den-api/versions/805150503452/schema)
