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

# List inbox reply drafts

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

## Request

- Base URL: `https://shipmail.to/api/v1`
- URL: `https://shipmail.to/api/v1/mailboxes/{id}/inbox/threads/{thread_id}/drafts`
- 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`)

List the conversation's reply drafts in every status, newest first, at most 100. Returns 404 when the thread has no conversation.

## Headers

- `X-Shipmail-Organization` string

## Response `200`

Reply drafts of the conversation.

- InboxReplyDraftList
  - `object` 'list', required
  - `data` InboxReplyDraft[], required
    - `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)
