| Method | Use when |
|---|---|
list_threads / listThreads | You want to browse all threads in a project |
read_thread / readThread | You already know the thread ID and need its runs |
How threads work
Each run you create can carry athread_id in its metadata. LangSmith uses this to group runs into threads. The backend looks for thread_id in metadata (falling back to session_id or conversation_id).
We recommend using UUID v7 thread IDs. UUIDv7 embeds a timestamp, which preserves correct time-ordering of threads. The LangSmith SDK exports a uuid7 helper (Python v0.4.43+, JS v0.3.80+):
- Python:
from langsmith import uuid7 - JS/TS:
import { uuid7 } from 'langsmith'
thread_id in the run metadata:
List all threads in a project
list_threads / listThreads fetches all threads in a project and groups their runs together. Results are sorted by most recent activity first.
Output
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
project_name / projectName | string | — | Project name. Required if project_id is not set. |
project_id / projectId | string | — | Project ID. Required if project_name is not set. |
limit | int | all | Maximum number of threads to return. |
offset | int | 0 | Number of threads to skip (for pagination). |
filter | string | — | Filter expression applied when fetching runs, using LangSmith trace query syntax. |
start_time / startTime | datetime / Date | 1 day ago | Only include runs started after this time. Widen this window to surface older threads. |
Return value
A list of thread objects, each containing:| Field | Type | Description |
|---|---|---|
thread_id | string | The thread identifier. |
runs | [Run](https://reference.langchain.com/python/langsmith/schemas/Run)[] | Root runs in this thread, sorted chronologically (oldest first). |
count | int | Number of runs in this thread. |
min_start_time | string | null | ISO timestamp of the earliest run. |
max_start_time | string | null | ISO timestamp of the most recent run. |
list_threads always returns root runs only. If you need child runs (e.g., tool calls, sub-chains), use read_thread instead, which accepts an is_root / isRoot parameter you can set to false.Read runs for a single thread
When you already know thethread_id, use read_thread / readThread. It returns an iterator over the thread’s runs directly, without fetching all threads first.
list_threads, each item here is a Run object directly — there is no grouping wrapper. Runs are returned in ascending chronological order by default.
Output
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
thread_id / threadId | string | — | Required. The thread to query. |
project_name / projectName | string | — | Project name. Required if project_id is not set. |
project_id / projectId | string | string[] | — | Project ID or list of IDs. Required if project_name is not set. |
is_root / isRoot | bool | true | Return only root runs. Set to false to include child runs. |
limit | int | all | Maximum number of runs to return. |
filter | string | — | Additional filter expression (combined with the thread filter). |
order | "asc" | "desc" | "asc" | Sort order. "asc" returns runs oldest-first (chronological). |
select | string[] | all fields | Specific run fields to return, to reduce response size. |
Return value
An iterator (Python) or async iterator (TypeScript) ofRun objects.
Examples
Filter threads by run properties
Pass a filter expression to narrow results using LangSmith trace query syntax. For example, to surface only threads containing at least one failed run:Look back further than 24 hours
By default,list_threads only surfaces threads with runs from the last day. Pass start_time to widen the window:
Reconstruct a conversation
Useread_thread with order="asc" to replay a conversation turn by turn:
Connect these docs to Claude, VSCode, and more via MCP for real-time answers.

