---
title: "Get an inbox reply draft"
method: GET
path: "/mailboxes/{id}/inbox/threads/{thread_id}/drafts/{draft_id}"
tags: ["Mailboxes", "Messages"]
---

# Get an inbox reply draft

`GET /mailboxes/{id}/inbox/threads/{thread_id}/drafts/{draft_id}`

## Request

- Base URL: `https://shipmail.to/api/v1`
- URL: `https://shipmail.to/api/v1/mailboxes/{id}/inbox/threads/{thread_id}/drafts/{draft_id}`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://shipmail.to/api/auth/oauth2/authorize`, token URL `https://shipmail.to/api/auth/oauth2/token`)

Read one reply draft with its status and stored content. Returns 404 when the draft is not in that conversation. subject, html and text are null, and to and cc are empty, once the stored draft no longer exists (after a send or cleanup).

## Headers

- `X-Shipmail-Organization` string

## Response `200`

Reply draft.

- InboxReplyDraft
  - `object` 'inbox_reply_draft', required
  - `id` string, required
  - `mailbox_id` string, required
  - `thread_id` string, required: Deprecated and not stable: a legacy thread ID that changes when the mail server re-threads its IDs or a relayed send's placeholder key is replaced. It remains supported in thread paths; store conversation_id instead.
  - `conversation_id` string, required: Stable Shipmail conversation identifier (thd_...). Store this: it survives thread merges and mail-server re-threading, which thread_id does not.
  - `based_on_message_id` string, nullable, required
  - `expected_version` integer, required
  - `reply_mode` 'reply' | 'reply_all', required
  - `status` 'draft' | 'sending' | 'sent' | 'invalidated' | 'failed', required
  - `to` object[], required: Recipients derived from the source message. Empty, like cc, once the stored draft no longer exists.
    - `address` string, email, required
    - `name` string, nullable, required
  - `cc` object[], required
    - `address` string, email, required
    - `name` string, nullable, required
  - `subject` string, nullable, required: Stored subject. Null once the stored draft no longer exists (after a send or cleanup).
  - `html` string, nullable, required: Stored HTML after sanitisation. Null once the stored draft no longer exists.
  - `text` string, nullable, required: Stored text part. Null once the stored draft no longer exists.
  - `sent_message_id` string, nullable, required: ID of the sent message once the draft is sent.
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `sent_at` string, date-time, nullable, required

## Other responses

- `401`: Authentication failed.
- `403`: Insufficient permissions.
- `404`: Resource not found.
- `422`: Validation failed.
- `429`: Rate limit exceeded.

---

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