---
title: "Get a thread"
method: GET
path: "/v1/threads/{id}"
tags: ["threads"]
---

# Get a thread

`GET /v1/threads/{id}`

## Request

- Base URL: `https://api.replylayer.ai`
- URL: `https://api.replylayer.ai/v1/threads/{id}`
- Auth: HTTP bearer

## Path parameters

- `id` string, required

## Query parameters

- `body_format` 'text' | 'html'
- `body_page` string
- `include_firewall_blocked` 'true' | 'false'
- `mailbox` string
- `view` 'summary' | 'verbose'

## Response `200`

Success

- object
  - `id` string, required
  - `mailbox_id` string, required
  - `mailbox_name` string, nullable
  - `message_count` integer, required
  - `messages` object[], required
    - `agent_safety_context` object, nullable
      - `guidance` string, required
      - `instruction_trust` object
        - `match` 'address', required
        - `provenance` 'managed', required
        - `verdict` 'verified_aligned', required
        - `verified_domain` string, nullable, required
        - `version` 'v1', required
      - `untrusted_content` boolean, required
    - `attachments` object[]
      - `av_scanned_at` string
      - `av_signature` string
      - `av_verdict` 'clean' | 'infected' | 'error' | 'skipped'
      - `content_disposition` string
      - `content_id` string
      - `content_type` string, required
      - `declared_mime_type` string
      - `filename` string, required
      - `hash` string, required
      - `inline` boolean
      - `mime_mismatch` boolean
      - `policy_action` 'deliver' | 'metadata_only' | 'quarantine' | 'block', required
      - `preview_char_count` integer, nullable
      - `preview_generated_at` string, date-time, nullable
      - `preview_kind` 'text' | 'null', nullable
      - `preview_page_count` integer, nullable
      - `preview_reason_code` string, nullable
      - `preview_status` 'pending' | 'ready' | 'blocked' | 'failed' | 'null', nullable
      - `preview_truncated` boolean, nullable
      - `raw_deleted_at` string, date-time
      - `raw_retention` 'not_retained' | 'temporary_processing' | 'retained_for_raw_download'
      - `raw_retention_reason` string
      - `size` integer, required
      - `sniffed_mime_type` string
      - `stored` boolean
    - `body` object, required
      - `char_count` integer, required
      - `content` string, nullable, required
      - `format` 'text' | 'html', required
      - `returned_char_count` integer, required
      - `truncated` boolean, required
    - `created_at` string, date-time, required
    - `dashboard_url` string, nullable
    - `direction` 'inbound' | 'outbound', required
    - `email_effect` object
      - `effect_status` 'sent' | 'held_for_review' | 'held_infrastructure' | 'blocked', required
      - `releasable` boolean, required
      - `retryable` boolean, required
      - `terminal` boolean, required
    - `firewall_block` object, nullable
      - `envelope_sender` string, nullable
      - `from_address` string, nullable
      - `matched_field` 'envelope' | 'from' | 'null', nullable
      - `matched_list` 'account_blocklist' | 'mailbox_allowlist' | 'null', nullable
      - `matched_pattern` string, nullable
      - `mode` 'blocklist' | 'allowlist', required
      - `reason_code` 'SENDER_BLOCKED' | 'SENDER_NOT_ON_ALLOWLIST', required
    - `hold_context` object, nullable
      - `agent_instructions` string[]
      - `review_causes` string[], nullable
      - `review_expires_at` string, date-time
      - `review_url` string
      - `summary_reasons` string[], required
      - `trigger_source` 'mailbox_policy' | 'scanner' | 'both', required
    - `id` string, required
    - `in_reply_to` string, nullable
    - `mailbox_id` string
    - `mailbox_name` string, nullable
    - `read_at` string, nullable
    - `recipient` string, required
    - `review_expires_at` string, date-time, nullable
    - `review_outcome` 'approved' | 'denied' | 'expired' | 'null', nullable
    - `review_reason` string, nullable
    - `review_trigger_source` 'mailbox_policy' | 'scanner' | 'both' | 'null', nullable
    - `reviewed_at` string, nullable
    - `reviewed_by_id` string, nullable
    - `reviewed_by_type` string, nullable
    - `scan` object, nullable
      - `categories` object[], required
        - `category` string, required
        - `decision` 'allow' | 'allow_with_warning' | 'quarantine' | 'require_human_approval' | 'block', required
      - `findings` object[], required
        - `agent_instructions` string[]
        - `attachment_filename` string
        - `attachment_index` integer
        - `attachment_policy_action` 'quarantine_message' | 'metadata_only_after_rewrite' | 'derived_text_finding'
        - `category` string, required
        - `decision` 'allow' | 'allow_with_warning' | 'quarantine' | 'require_human_approval' | 'block', required
        - `expires_at` string, date-time
        - `failure_class` 'inference_error' | 'model_judgment'
        - `pii_type` 'ssn' | 'credit_card' | 'phone_number'
        - `reason` string, nullable, required
        - `retryable` boolean
        - `subtype` string
        - `warning` object
          - `affected_urls` string[], required
          - `attribution_text` string, required
          - `attribution_url` string, required
          - `learn_more` object[], required
            - `threat_type` 'MALWARE' | 'SOCIAL_ENGINEERING' | 'UNWANTED_SOFTWARE' | 'SOCIAL_ENGINEERING_EXTENDED_COVERAGE', required
            - `url` string, required
          - `qualified_wording` string, required
      - `verdict` 'clean' | 'warning' | 'review_required' | 'blocked' | 'quarantined', required
    - `sender` string, required
    - `sender_authentication` object, nullable
      - `from_domain` string, nullable
      - `provenance` 'managed' | 'self_hosted_imap' | 'null', nullable, required
      - `signing_domain` string, nullable
      - `verdict` 'verified_aligned' | 'authenticated_unaligned' | 'failed' | 'none' | 'error' | 'null', nullable, required
    - `starred` boolean
    - `state` string, required
    - `subaddress_instance_id` string, nullable
    - `subject` string, required
    - `thread_id` string, nullable
  - `subject` string, required

## Other responses

- `400`: Validation error
- `401`: Missing or invalid API key (code: UNAUTHORIZED)
- `403`: Forbidden (code: INSUFFICIENT_SCOPE)
- `404`: Not found
- `429`: Rate limited (code: RATE_LIMITED)
- `500`: Internal error (code: INTERNAL_ERROR)

---

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