---
title: "Retrieve a conversation"
description: "One conversation, oldest message first: what you received (bodies, reply_to, verdicts, attachments) and what you sent from it (status and recipients, no body). `GET /api/v1/email/threads/{id}`"
url: https://www.unitpost.com/docs/email/get-email-threads-id
section: "Email API reference"
updated: 2026-10-13
---
# Retrieve a conversation

`GET /api/v1/email/threads/{id}`

One conversation, oldest message first: what you received (bodies, `reply_to`, verdicts, attachments) and what you sent from it (status and recipients, no body). A long conversation comes in pages, newest first: this read holds its newest `limit` messages (fewer when their bodies are large), and `older_cursor` passed as `before` reads the messages before them, as the inbox's "Show earlier messages" does. Answer a message with [Reply to a conversation](https://www.unitpost.com/docs/email/post-email-threads-id-reply). Requires the `emails:read` capability.

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `id` | path | string | yes | — |
| `limit` | query | integer | no | Messages per read, 1–100 (default 50). A read stays under a size budget, so big messages can make it shorter. |
| `before` | query | string | no | The previous read's `older_cursor`: read the messages before those. |

## Response fields (200)

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `object` | string | yes | — |
| `id` | string | yes | — |
| `subject` | string \| null | yes | — |
| `last_message_at` | string | yes | — |
| `sender` | object \| null | yes | The other party; null when the conversation has no received mail. |
| `older_hidden` | boolean | yes | Older messages exist than the ones in `messages`; read them with `before` = `older_cursor`. |
| `older_cursor` | string \| null | yes | Pass as `before` to read the messages before these (the next page back). Null when nothing older remains. |
| `sent_with_unitpost` | boolean | yes | A reply from here carries the "Sent with Unitpost" line (your plan decides). |
| `messages` | object[] | yes | Oldest first. What you sent is metadata only: no body. |

## Responses

| Status | Description |
| --- | --- |
| 200 | The conversation (one page of it). |
| 401 | Missing or invalid API key. |
| 403 | Insufficient scope. |
| 404 | Conversation not found. |
| 422 | A bad `limit` or `before`, or an unknown query key. |

## Example request

```bash
curl -X GET 'https://www.unitpost.com/api/v1/email/threads/thr_123' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'User-Agent: my-app/1.0'
```

## Example response (200)

```json
{
  "object": "email_thread",
  "id": "id_123",
  "subject": "Welcome to Acme",
  "last_message_at": "2026-01-01T00:00:00.000Z",
  "sender": {
    "address": "string"
  },
  "older_hidden": false,
  "older_cursor": "string",
  "sent_with_unitpost": false,
  "messages": [
    {
      "object": "received_email",
      "direction": "inbound",
      "id": "id_123",
      "received_at": "2026-01-01T00:00:00.000Z",
      "from": "you@yourdomain.com",
      "from_name": "string",
      "to": [
        "customer@example.com"
      ],
      "cc": [
        "string"
      ],
      "reply_to": [
        "string"
      ],
      "subject": "Welcome to Acme",
      "message_id": "message_123",
      "text": "string",
      "html": "string",
      "verdicts": {
        "spam": "string",
        "virus": "string",
        "spf": "string",
        "dkim": "string",
        "dmarc": "string"
      },
      "size": 1,
      "attachments": [
        {
          "object": "received_attachment",
          "id": "id_123",
          "filename": "string",
          "content_type": "string",
          "content_disposition": "string",
          "content_id": "content_123",
          "size": 1
        }
      ],
      "sent_by_us": false,
      "duplicate": false
    }
  ]
}
```

## Links

- HTML reference (with Node.js, Python, Ruby, PHP, Laravel, Go, Java, Rust, .NET and CLI examples): https://www.unitpost.com/docs/email/get-email-threads-id
- OpenAPI 3.1 (full schemas): https://www.unitpost.com/api/v1/openapi.json
