---
title: "List threads for a user"
method: GET
path: "/api/v1/users/{user}/threads"
---

# List threads for a user

`GET /api/v1/users/{user}/threads`

Returns all threads visible to the specified user. The authenticated caller must
have access to the target user's account; a 403 is returned otherwise.

Pass one or more `agent` IDs to narrow results to threads where at least one of
the listed agents is also a member — useful for displaying every thread a user
shares with a particular agent. Pass one or more `filter` objects to narrow
results by thread metadata key/value pairs. Both narrowings may be combined in
a single request.

Results are returned as a flat array; no cursor-based pagination is applied.

## Path parameters

- `user` string, required

## Query parameters

- `agent` string[]
- `filter` object[]
  - `key` string, required — Top-level key of the metadata object to match against.
  - `type` string, required — Filter discriminator. Must be `"metadata"` to identify this as a metadata filter.
  - `value` string, required — Expected value for the given `key`. Matched with strict equality against the stored metadata.

## Response `200`

Successful response

- object — Listing of threads visible to the user.
  - `data` object[], required — Array of thread objects matching the requested filters and agent narrowings.
    - `agent_user` string — ID of the agent that owns this thread (`agt_...`). `null` for user-owned or team-owned threads.
    - `created_at` string, date-time — When the thread was created (ISO 8601).
    - `creator` object — Expanded user object for the user who created this thread. Populated only when the association is loaded.
      - `alias` string — Short handle or alias for the user. `null` if not set.
      - `app` string — ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.
      - `app_name` string — Display name of the user's app. `null` when the app association was not preloaded by the caller.
      - `email` string — Email address of the user.
      - `id` string, required — User ID (`usr_...`).
      - `is_system_user` boolean — `true` if this account is an internal system user rather than a human. System users are created automatically by the platform.
      - `metadata` object — Arbitrary key-value metadata attached to the user. Defaults to an empty object.
      - `name` string — Full display name of the user. `null` if the user has not set a name.
      - `org` string — ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.
      - `org_name` string — Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.
      - `org_role` string — Role of the user within their organization. One of `"admin"`, `"member"`, or `"viewer"`. `null` when the user is not a member of any organization.
      - `sandbox` string — ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.
      - `sandbox_name` string — Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.
    - `description` string — Optional description or purpose statement for the thread. `null` if not set.
    - `id` string, required — Thread ID (`thr_...`).
    - `is_channel` boolean — Whether this thread operates as a channel — a multi-member broadcast-style conversation.
    - `is_default` boolean — Whether this is the default thread for its owner. Each user or team has at most one default thread.
    - `is_transient` boolean — Whether this thread is ephemeral and may be deleted automatically after a period of inactivity or when its TTL expires.
    - `is_unlisted` boolean — Whether this thread is hidden from public discovery. Unlisted threads are accessible only to direct participants.
    - `key` string — Application-defined stable key that uniquely identifies the thread within its scope. Useful for idempotent creation. `null` if not set.
    - `last_activity` string, date-time — When the last message or activity occurred in this thread. Present only when activity enrichment is requested.
    - `metadata` object — Arbitrary key-value metadata attached to the thread. Shape is application-defined; `null` if no metadata has been set.
    - `muted` boolean — Whether the authenticated user has muted notifications for this thread. `true` suppresses all notification delivery.
    - `org` string — ID of the organization this thread belongs to (`org_...`). `null` for threads outside an org context.
    - `parent_message` object — The message that spawned this thread as a sub-thread. `null` for top-level threads.
      - `actors` object[] — Resolved actor descriptors for the message sender, combining identity and display metadata. Always contains exactly one entry.
        - `alias` string — Short handle or alias for the actor, used as an alternate display identifier. `null` if not configured.
        - `id` string — Composite actor identifier. Format is `"user-<usr_...>"` for human users or `"agent-<agi_...>"` for agents.
        - `name` string — Display name of the actor shown in the UI. `null` if no name is set.
        - `profile_picture` object — Profile picture for the actor. `null` if the actor has no profile picture.
          - `file` string — ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file.
          - `height` integer — Height of the image in pixels. `null` if not known.
          - `media` string — ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity.
          - `mime_type` string — MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known.
          - `refresh_url` string — Endpoint URL you can call to obtain a fresh signed `url` when the current one has expired. `null` if the URL does not require refreshing.
          - `url` string — Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires.
          - `width` integer — Width of the image in pixels. `null` if not known.
      - `agent` string — ID of the agent user that sent this message (`agi_...`). `null` for messages sent by human users.
      - `attachments` object[] — Files, links, tasks, media, artifacts, and actions attached to this message. Empty array if there are no attachments.
        - `content_type` string — MIME type of the attached file, e.g. `"image/png"` or `"application/pdf"`. Present on `file`, `artifact`, and `media` types. `null` otherwise.
        - `description` string — Short description. The page meta-description for `scraped_link`, the artifact description for `artifact`, and the task description for `task` types. `null` on other types.
        - `filename` string — Original filename of the attached file, e.g. `"report.pdf"`. Present on `file`, `artifact`, and `media` types. `null` otherwise.
        - `height` integer — Height in pixels of the media item. Present on `media` type only. `null` otherwise.
        - `id` string, required — Unique identifier for this attachment within the message.
        - `image_height` integer — Height in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise.
        - `image_source` object — Image source metadata for inline rendering. Present on `file`, `scraped_link`, `artifact`, and `media` types when the content is an image. `null` otherwise.
          - `file` string — ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file.
          - `height` integer — Height of the image in pixels. `null` if not known.
          - `media` string — ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity.
          - `mime_type` string — MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known.
          - `refresh_url` string — Endpoint URL you can call to obtain a fresh signed `url` when the current one has expired. `null` if the URL does not require refreshing.
          - `url` string — Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires.
          - `width` integer — Width of the image in pixels. `null` if not known.
        - `image_url` string — URL of the preview image extracted from the scraped page. Present on `scraped_link` type only. `null` otherwise.
        - `image_width` integer — Width in pixels of the scraped preview image. Present on `scraped_link` type only. `null` otherwise.
        - `media_type` string — The media category, e.g. `"video"` or `"audio"`. Present on `media` type only. `null` otherwise.
        - `name` string — Display name of the media item. Present on `media` type only. `null` otherwise.
        - `object` object — The full embedded object payload. For `task` type, contains the task record. For `action` type, contains the action definition. `null` on other types.
        - `title` string — Display title. The page title for `scraped_link`, the artifact name for `artifact`, and the task title for `task` types. `null` on other types.
        - `type` string, required — The attachment type. One of `"file"`, `"scraped_link"`, `"artifact"`, `"task"`, `"media"`, or `"action"`. Determines which additional fields are present.
        - `url` string — URL to access the resource. A signed download URL for `file` and `artifact` types; the original URL for `scraped_link`; a media playback URL for `media`. `null` on `task` and `action` types.
        - `variants` object[] — Array of available encoding variants for the media item (e.g. different resolutions). Present on `media` type only. `null` otherwise.
          - `content_type` string — MIME type of this variant's file (e.g., `"image/jpeg"`, `"video/mp4"`). `null` if the file is not loaded.
          - `created_at` string, date-time — When this variant was created (ISO 8601).
          - `file` string — ID of the underlying storage file that backs this variant (`fil_...`).
          - `filename` string — Original filename of the uploaded file for this variant. `null` if the file is not loaded.
          - `height` integer — Height of this variant in pixels. `null` if not recorded.
          - `id` string, required — Media variant ID (`mvr_...`).
          - `image_source` object — Resolved image delivery metadata for this variant, including dimensions and CDN URL. `null` for non-image content types.
            - `file` string — ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file.
            - `height` integer — Height of the image in pixels. `null` if not known.
            - `media` string — ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity.
            - `mime_type` string — MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known.
            - `refresh_url` string — Endpoint URL you can call to obtain a fresh signed `url` when the current one has expired. `null` if the URL does not require refreshing.
            - `url` string — Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires.
            - `width` integer — Width of the image in pixels. `null` if not known.
          - `updated_at` string, date-time — When this variant was last updated (ISO 8601).
          - `url` string — Signed download URL for this variant, resolved at request time. `null` if the file is unavailable.
          - `variant_key` string — Identifier for this variant's processing tier. Common values include `"original"` (the unmodified upload) and `"thumbnail"` (a resized preview).
          - `width` integer — Width of this variant in pixels. `null` if not recorded.
        - `version` integer — Version number of the attached artifact at the time of attachment. Present on `artifact` type only. `null` otherwise.
        - `width` integer — Width in pixels of the media item. Present on `media` type only. `null` otherwise.
      - `branched_thread` string — ID of the thread that was branched from this message (`thr_...`). `null` if this message has not spawned a branch thread.
      - `content` string — Text content of the message. `null` for messages that contain only attachments.
      - `created_at` string, date-time — When the message was posted (ISO 8601).
      - `has_replies` boolean — Whether this message has at least one reply. Only present when explicitly requested or computed by the server.
      - `id` string, required — Message ID (`msg_...`).
      - `idempotency_key` string — Client-supplied idempotency key used to deduplicate message sends. `null` if the sender did not provide one.
      - `legacy_agent` string — Identifier of the legacy chat agent that sent this message, if applicable. `null` for messages sent by users or modern agent users.
      - `metadata` object — Arbitrary key-value metadata attached to the message. Always present; defaults to an empty object when no metadata has been set.
      - `org` string — ID of the organization that owns this message (`org_...`).
      - `reactions` object[] — Emoji and other reactions added to this message by users. Empty array if no reactions have been added or the association is not preloaded.
        - `payload` object — Type-specific reaction data. For `"emoji_reaction"` reactions, contains an `emoji` key with the Unicode emoji string (e.g., `"👍"`).
        - `type` string, required — Reaction type identifier. Currently always `"emoji_reaction"` for emoji-based reactions.
        - `user` string — Public ID of the user who added the reaction (`usr_...`).
      - `rendering_mode` string — Display hint for how the message should be rendered. One of `"reply"`, `"direct"`, or `"inline"`. `null` for user-authored messages, which are always rendered as standard replies.
      - `replies` object[] — Inline array of reply messages, each serialized as a full message object. Only present when the server has preloaded replies for this message.
      - `replies_after_cursor` string — Opaque pagination cursor to fetch replies posted after the current page. Only present when inline replies are included in the response.
      - `replies_before_cursor` string — Opaque pagination cursor to fetch replies posted before the current page. Only present when inline replies are included in the response.
      - `reply_count` integer — Total number of direct replies to this message. Only present when explicitly requested or computed by the server.
      - `reply_to` object — The parent message this message is a reply to, expanded as a full message object when loaded. `null` if this is a top-level message or the association is not preloaded.
      - `sandbox` string — ID of the developer sandbox this message belongs to (`dsb_...`). `null` for non-sandbox messages.
      - `team` string — ID of the team this message is scoped to (`tem_...`). `null` if the message is not team-scoped.
      - `thread` string — ID of the thread this message belongs to (`thr_...`). `null` for messages not yet associated with a thread.
      - `user` string — The human user who sent this message. Returns a public ID string (`usr_...`) when the association is not preloaded, or an expanded user object when it is. `null` for messages sent by agents.
    - `participant` string[] — Array of participant user IDs (`usr_...`) who are members of this thread.
    - `participants` object[] — Expanded participant user objects for each member of this thread. Populated only when the association is loaded.
      - `alias` string — Short handle or alias for the user. `null` if not set.
      - `app` string — ID of the app this user (and their access token) is scoped to (`dap_...`). `null` if the user is not scoped to an app.
      - `app_name` string — Display name of the user's app. `null` when the app association was not preloaded by the caller.
      - `email` string — Email address of the user.
      - `id` string, required — User ID (`usr_...`).
      - `is_system_user` boolean — `true` if this account is an internal system user rather than a human. System users are created automatically by the platform.
      - `metadata` object — Arbitrary key-value metadata attached to the user. Defaults to an empty object.
      - `name` string — Full display name of the user. `null` if the user has not set a name.
      - `org` string — ID of the organization this user belongs to (`org_...`). `null` if the user is not a member of any organization.
      - `org_name` string — Display name of the user's organization. `null` when the user is not in an org, or when the org association was not preloaded by the caller.
      - `org_role` string — Role of the user within their organization. One of `"admin"`, `"member"`, or `"viewer"`. `null` when the user is not a member of any organization.
      - `sandbox` string — ID of the sandbox environment this user is scoped to (`sbx_...`). `null` for production users.
      - `sandbox_name` string — Display name of the user's sandbox environment. `null` for production users, or when the sandbox association was not preloaded by the caller.
    - `participating_actor` string[] — Composite actor identifiers for all participants currently active in this thread. Present only when actor enrichment is requested.
    - `participating_agents` object[] — Expanded agent objects for all agents participating in this thread. Present only when agent enrichment is requested.
      - `acl` object — Access control list for the agent. Contains a `grants` array where each entry specifies `principal_type`, `principal`, and `actions`. `null` when no ACL restrictions are applied and the agent is accessible to all members of its scope.
        - `add` object[] — Patch mode: grants to add or merge into the existing list. Cannot be combined with `grants`.
          - `actions` string[], required — Array of action strings the principal is permitted to perform, e.g. `["read", "write"]`. Must contain at least one entry.
          - `principal` string — The identifier of the principal. A string ID for `"user"`, `"team"`, `"org"`, and `"agent"` types; one of `"admin"`, `"member"`, or `"viewer"` for `"org_role"`; omit entirely when `principal_type` is `"everyone"`.
          - `principal_type` string, required — The kind of principal receiving the grant. One of `"user"`, `"team"`, `"org"`, `"org_role"`, `"agent"`, or `"everyone"`.
        - `grants` object[] — Replace mode: the complete new list of grants that replaces all existing entries. Send an empty array (`[]`) to clear all grants. Cannot be combined with `add` or `remove`.
          - `actions` string[], required — Array of action strings the principal is permitted to perform, e.g. `["read", "write"]`. Must contain at least one entry.
          - `principal` string — The identifier of the principal. A string ID for `"user"`, `"team"`, `"org"`, and `"agent"` types; one of `"admin"`, `"member"`, or `"viewer"` for `"org_role"`; omit entirely when `principal_type` is `"everyone"`.
          - `principal_type` string, required — The kind of principal receiving the grant. One of `"user"`, `"team"`, `"org"`, `"org_role"`, `"agent"`, or `"everyone"`.
        - `remove` object[] — Patch mode: principals whose grants should be removed from the existing list. Cannot be combined with `grants`.
          - `principal` string — The identifier of the principal to remove. A string ID for `"user"`, `"team"`, `"org"`, and `"agent"` types; one of `"admin"`, `"member"`, or `"viewer"` for `"org_role"`. Omit when `principal_type` is `"everyone"`.
          - `principal_type` string, required — The kind of principal to remove. One of `"user"`, `"team"`, `"org"`, `"org_role"`, `"agent"`, or `"everyone"`.
      - `app` string — ID of the application that owns this agent (`dap_...`).
      - `created_at` string, date-time — When the agent was created (ISO 8601).
      - `default_model` string — Default LLM model identifier used by this agent when no model is specified at runtime (e.g. `"claude-3-7-sonnet-latest"`).
      - `email` string — Email address provisioned for this agent. `null` if email delivery is not configured.
      - `id` string, required — Agent ID (`agi_...`).
      - `identity` string — System-level identity prompt that shapes the agent's persona and behavior.
      - `last_applied_template_config` string — ID of the AgentTemplate config (`cfg_...`) this agent was last provisioned or updated from. `null` for manually created agents.
      - `lookup_key` string — Stable, user-defined identifier for this agent within the application. Unique per app.
      - `metadata` object — Arbitrary key-value metadata attached to the agent. Not interpreted by the platform.
      - `name` string — Human-readable display name for the agent. `null` if not set.
      - `org` string — ID of the organization this agent belongs to (`org_...`). `null` if the agent is not org-scoped.
      - `org_name` string — Display name of the organization this agent belongs to. `null` when the agent is not org-scoped or when the org association was not preloaded.
      - `originator` string — Free-form label identifying the source or author that created this agent (e.g. a username or pipeline name).
      - `phone_number` string — Phone number provisioned for this agent. `null` if SMS is not configured.
      - `sandbox` string — ID of the sandbox environment this agent is scoped to (`dsb_...`). `null` in production deployments.
      - `source_solution` object — Source Solution and AgentTemplate summary for agents provisioned from a Solution. Includes `upgrade_available`, `latest_version`, and `latest_solution` so you can render an upgrade badge without a separate dry-run call. `null` for hand-built agents and agents whose tracked template or parent Solution has been deleted. Populated only on single-agent GET responses, never on list endpoints.
        - `solution` object, required — Summary of the parent Solution, including `upgrade_available`, `latest_version`, and `latest_solution` when a newer system-scoped version is available for the agent's org-scoped Solution.
          - `category_keys` string[] — Category tag keys declared in the Solution body, used to group Solutions in the catalog. An empty array when the body declares none.
          - `created_at` string, date-time — When the Solution config was first imported (ISO 8601).
          - `description` string — Short tagline or summary declared in the Solution body, used as the card subhead in catalog UIs. `null` when the Solution body does not set one.
          - `id` string, required — Solution config ID (`cfg_...`).
          - `kind` string, required — Resource type. Always `"Solution"`.
          - `latest_solution` string — When `upgrade_available` is `true`, the system-scope Solution config ID (`cfg_...`) that should be used as the upgrade source. `null` otherwise.
          - `latest_version` string — When `upgrade_available` is `true`, the higher system-scope `solution_version` available to upgrade to. `null` otherwise.
          - `lookup_key` string — The lookup key stored on the Solution config, if one was assigned during import. `null` when no lookup key was set.
          - `metadata` object — Arbitrary key-value metadata declared in the Solution body (e.g. category or display hints). Present as an empty object when the body declares none.
          - `name` string — Human-facing display name declared in the Solution body. `null` when the Solution body does not set one.
          - `org` string — Organization ID (`org_...`) that owns this Solution config, when the Solution is scoped to a specific org. `null` for system-scope (app-level) Solutions.
          - `org_logo` object — Canonical image-source object for the resolved `org`'s logo, used as the principal category section glyph. Carries the signed `url` plus a `refresh_url`. `null` when `org_slug` is `null` or the org has no logo.
            - `file` string — ID of the underlying storage file (`fil_...`). `null` when the image is not backed by a platform storage file.
            - `height` integer — Height of the image in pixels. `null` if not known.
            - `media` string — ID of the associated media record (`med_...`). `null` when the image is not linked to a media entity.
            - `mime_type` string — MIME type of the image, e.g. `"image/png"` or `"image/jpeg"`. `null` if not known.
            - `refresh_url` string — Endpoint URL you can call to obtain a fresh signed `url` when the current one has expired. `null` if the URL does not require refreshing.
            - `url` string — Signed or public URL for downloading the image. May be time-limited; use `refresh_url` to obtain a new URL when this one expires.
            - `width` integer — Width of the image in pixels. `null` if not known.
          - `org_name` string — Display name of the resolved `org`. Pairs with `org_slug` as the principal catalog category's label. `null` when `org_slug` is `null`.
          - `org_slug` string — Resolved slug of the Solution body's `org` (the publishing organization), when set and it resolves to a real org visible to the viewer. When present this is the Solution's principal catalog category key — clients group the Solution under this org ahead of `category_keys`. `null` when the body has no `org` or it doesn't resolve.
          - `owners` string[], required — Owner scopes this Solution appears under. Members: `"system"` (app-level system scope) and/or `"org"` (viewer's org scope).
          - `readme_url` string — Relative path to the public README endpoint with a signed token already embedded. `null` when the Solution has no README. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.
          - `solution_id` string — Stable UUID declared in the Solution body, used to identify the same logical Solution across multiple installed copies and owner scopes. `null` when the body omits it.
          - `solution_version` string — Semver string declared in the Solution body (e.g. `"1.2.0"`). `null` when the body does not declare a version.
          - `tag_keys` string[] — Freeform tag keys declared in the Solution body. An empty array when the body declares none.
          - `template_kind` string — Wrapped template kind — `"AgentTemplate"`, `"AutomationTemplate"`, `"AgentRoutineTemplate"`, `"AgentToolTemplate"`, `"AgentComputerTemplate"`, or `"SolutionTemplateRef"` for ref-mode bundles.
          - `templates` object[], required — Template configs bundled by this Solution, in declaration order — the first entry is the deployable template the Solution wraps; the rest are sibling templates the wrapped template references.
            - `description` string — Short prose blurb from the template body's `description:` field. `null` when the body doesn't set one. Used as the card subhead in the Library carousel.
            - `display_name` string — Human-facing label from the template body's `display_name:` field. `null` when the body doesn't set one. Library carousels use this for the card title, falling back to a humanized `name`.
            - `id` string — Template config ID (`cfg_...`). `null` for inline-only templates.
            - `kind` string, required — Template config kind, or `SolutionTemplateRef` / `SolutionTemplatePath` when unresolved.
            - `lookup_key` string — Lookup key stamped on the template config at import time. `null` when no lookup key was assigned.
            - `name` string — Canonical name from the template body. For `AgentTemplate` this doubles as the human-facing label; for `AgentToolTemplate` it's the LLM-facing tool function identifier (snake_case); for `AgentRoutineTemplate` it's the routine identifier (kebab-case). Clients rendering carousels should prefer `display_name` and fall back to humanizing `name`.
            - `readme_url` string — Relative path to the public README endpoint with a signed token already embedded, scoped to this template's bundled markdown asset. `null` when the Solution body's `templates[].readme_path` is unset for this entry. Token expires in 1 hour — refresh via `GET /api/v1/solutions/:solution`.
            - `virtual_path` string — Stable virtual path assigned to the template config. `null` when no virtual path was set.
          - `updated_at` string, date-time — When the Solution config was last modified (ISO 8601).
          - `upgrade_available` boolean, required — `true` when this Solution is installed at the viewer's org scope and the app-level system scope carries a higher `solution_version`. Always `false` for system-only rows.
          - `virtual_path` string — The stable virtual path assigned to this Solution config, used as the deduplication key when the same Solution appears under multiple owner scopes. `null` when unset.
        - `template` object, required — Summary of the AgentTemplate config (`cfg_...`) the agent was last provisioned or updated from.
          - `created_at` string, date-time — When this template config was created (ISO 8601).
          - `description` string — Description of the template from the config body. `null` if the current version has no `description` field.
          - `display_name` string — Human-readable display name from the config body. `null` if the current version has no `display_name` field.
          - `id` string, required — Template config ID (`cfg_...`).
          - `kind` string, required — Config kind identifier for this template (e.g. `"agent_tool_template"`).
          - `lookup_key` string — Stable lookup key assigned to this template config. `null` if no lookup key is set.
          - `name` string — Template name as stored in the config body. `null` if the current version has no `name` field.
          - `updated_at` string, date-time — When this template config was last modified (ISO 8601).
          - `virtual_path` string — Virtual filesystem path for this template config. `null` if not set.
      - `team` string — ID of the team that owns this agent (`tem_...`). `null` if the agent is not team-scoped.
      - `updated_at` string, date-time — When the agent was last modified (ISO 8601).
      - `user` string — ID of the user that owns this agent (`usr_...`). `null` if the agent is not user-scoped.
    - `role` string — The authenticated user's membership role in this thread, e.g. `"owner"`, `"member"`, or `"viewer"`. `null` if the user is not a member.
    - `sandbox` string — ID of the developer sandbox this thread is scoped to (`sbx_...`). `null` for production threads.
    - `settings` object — Per-thread configuration settings controlling AI agent behavior for this thread.
      - `agent_enabled` boolean — Whether the AI agent is active for this thread. `true` enables AI responses; `false` disables them. Defaults to `true` when settings have not been explicitly configured.
    - `slug` string — URL-safe slug for the thread, used in human-readable permalinks. `null` if not assigned.
    - `sub_threads` object[] — Threads that are nested under this thread as replies to a parent message. Present only when sub-thread enrichment is requested.
    - `team` string — ID of the team that owns this thread (`team_...`). `null` for user-owned or agent-owned threads.
    - `title` string — Human-readable name of the thread. `null` if no title has been set.
    - `ttl` integer — Time-to-live in seconds after which the thread may be automatically cleaned up. `null` if the thread does not expire.
    - `unread_count` integer — Number of messages in this thread that the authenticated user has not yet read. Present only when read-state enrichment is requested.
    - `updated_at` string, date-time — When the thread was last modified (ISO 8601).
    - `user` string — ID of the user who owns this thread (`usr_...`). `null` for team-owned or agent-owned threads.

## Other responses

- `401` — Unauthorized
- `403` — Forbidden

---

[API](https://skmtc.net/archastro/apis/archastro-platform-api.md) · [All operations](https://skmtc.net/archastro/apis/archastro-platform-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/archastro/archastro-platform-api/versions/a8772b442f86/schema)
