---
title: "Get Text Thread"
method: GET
path: "/texts/threads/{thread_id}"
tags: ["Texts"]
---

# Get Text Thread

`GET /texts/threads/{thread_id}`

## Request

- Base URL: `https://api.openintake.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.openintake.ai/texts/threads/{thread_id}`
- Auth: none declared

A thread, every message in it oldest first, and its neighbors in the list.

## Path parameters

- `thread_id` string, uuid, required

## Response `200`

Successful Response

- TextThreadDetail
  - `text_thread_id` string, uuid, required
  - `contact_phone` string, required
  - `business_phone` string, required
  - `contact_name` string, nullable: The linked outbound lead's name, else the thread's display name
  - `outbound_lead_id` string, uuid, nullable
  - `lead_id` string, uuid, nullable
  - `status` string, required
  - `last_message_at` string, date-time, nullable
  - `last_message_preview` string, nullable
  - `last_message_direction` string, nullable
  - `last_inbound_at` string, date-time, nullable
  - `is_unread` boolean, required
  - `needs_staff` boolean: The SMS agent handed this person to staff and no one at the firm has texted them or marked it handled since
  - `needs_staff_since` string, date-time, nullable: When the SMS agent handed the thread to staff, while it still needs them
  - `needs_staff_reason` string, nullable: Why the SMS agent handed the thread to staff, in the firm's words
  - `message_count` integer, required
  - `is_test` boolean, required
  - `created_at` string, date-time, required
  - `lead` TextThreadLead: The outbound lead a thread belongs to.
    - `outbound_lead_id` string, uuid, required
    - `first_name` string, nullable
    - `last_name` string, nullable
    - `phone_number` string, nullable
    - `email` string, nullable
    - `status` string, required
  - `messages` TextMessage[], required
    - `sms_id` string, uuid, required
    - `direction` string, required
    - `body` string, required
    - `status` string, nullable: pending until the send task runs, then Twilio's status (queued, sent, delivered, undelivered, failed) or received for inbound
    - `error_code` string, nullable
    - `failure_reason` string, nullable: Why the message was not sent or not delivered, when it was not
    - `sender_kind` string, nullable: contact, user, automation, or system
    - `sent_by_user_id` string, uuid, nullable
    - `sent_by_name` string, nullable
    - `created_at` string, date-time, required
    - `sent_at` string, date-time, nullable
  - `send_blocked_reason` string, nullable: Why a message cannot be sent to this contact right now, when it cannot
  - `previous_thread_id` string, uuid, nullable: The thread above this one in the default list order (newest activity first)
  - `next_thread_id` string, uuid, nullable: The thread below this one in the default list order

## Other responses

- `422`: Validation Error

## Changes

- **2026-10-27** `4d3da2f87786`: 3 info
  - added the optional property `needs_staff` to the response with the `200` status
  - added the optional property `needs_staff_reason` to the response with the `200` status
  - added the optional property `needs_staff_since` to the response with the `200` status
- **2026-09-25** `2874401d2b40`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/openintake/apis/openintake-api/changes/texts/threads/:thread_id/get.md)

---

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