> ## Documentation Index
> Fetch the complete documentation index at: https://developers.telnyx.com/llms.txt
> Use this file to discover all available pages before exploring further.

# List threads across every inbox in the account

> Lists thread summaries for the whole account, newest first, using stable
cursor pagination. An agent operating many inboxes gets every
conversation in one call instead of one call per inbox. Each thread
carries its own `inbox_id` so a reply can be routed back to the right
inbox. Use `filter[inbox_id]` (repeatable) to narrow the result to
specific inboxes. Because a thread ID can be delivered to multiple
inboxes, each result is identified by its `(inbox_id, id)` pair.




## OpenAPI

````yaml /openapi/source/external/email/email.json get /email_threads
openapi: 3.0.3
info:
  x-latency-category: responsive
  x-endpoint-cost: light
  title: Telnyx API
  description: >-
    Programmable email: sending, templates, validation, events, agent inboxes,
    drafts, threads, domains & DKIM, suppressions and unsubscribe groups.
  version: 2.0.0
  contact:
    name: Telnyx
    url: https://telnyx.com
servers:
  - url: https://api.telnyx.com/v2
security:
  - BearerAuth: []
tags:
  - name: Email Validations
    description: Validate email addresses synchronously or in asynchronous batches.
  - name: Email Templates
    description: Create, list, retrieve, update, delete, and render Liquid email templates.
  - name: Email Messages
    description: >-
      Send and manage email messages. Legacy `/v2/emails` routes are aliases for
      these endpoints.
  - name: Email Events
    description: Retrieve account-level email events and event statistics.
  - name: Email Inboxes
    description: >-
      Create and manage agent inboxes, retrieve inbound messages and threads,
      and reply to or forward messages.
  - name: Email Drafts
    description: >-
      Create, list, retrieve, update, delete, and send unsent draft messages
      belonging to an agent inbox.
  - name: Email Threads
    description: >-
      Account-wide conversation threads across every inbox, for agents operating
      many inboxes at once.
  - name: Email Domains
    description: Email domain CRUD operations
  - name: Email Domain DNS Records
    description: DNS verification records for email domains
  - name: Email Webhooks
    description: Per-domain webhook endpoints with event subscriptions
  - name: Email Suppressions
    description: Recipient suppression records (`/v2/email_blocks`).
  - name: Email Suppression Imports
    description: Async CSV import of competitor suppression lists.
  - name: Email Unsubscribe Groups
    description: Named groups and group-scoped suppressions.
paths:
  /email_threads:
    get:
      tags:
        - Email Threads
      summary: List threads across every inbox in the account
      description: |
        Lists thread summaries for the whole account, newest first, using stable
        cursor pagination. An agent operating many inboxes gets every
        conversation in one call instead of one call per inbox. Each thread
        carries its own `inbox_id` so a reply can be routed back to the right
        inbox. Use `filter[inbox_id]` (repeatable) to narrow the result to
        specific inboxes. Because a thread ID can be delivered to multiple
        inboxes, each result is identified by its `(inbox_id, id)` pair.
      operationId: ListEmailThreads
      parameters:
        - name: filter[inbox_id]
          in: query
          required: false
          description: |
            Restrict results to one or more inboxes. Repeat the parameter
            (`filter[inbox_id][]=...&filter[inbox_id][]=...`) or pass a
            comma-separated list. Omit to list every inbox in the account.
            Inboxes outside the account are silently excluded. If the filter
            is present, it must contain at least one non-empty UUID.
          explode: true
          schema:
            type: array
            minItems: 1
            items:
              type: string
              format: uuid
        - name: page[size]
          in: query
          required: false
          description: Number of results to return. Defaults to 25; maximum is 100.
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 25
        - name: page[after]
          in: query
          required: false
          description: Opaque cursor returned by the previous page.
          schema:
            type: string
        - name: filter[label]
          in: query
          required: false
          description: >-
            Returns only threads carrying this label. Matching is exact and
            case-sensitive. Thread labels are independent of the labels on the
            thread's messages.
          schema:
            type: string
            maxLength: 255
      responses:
        '200':
          description: Paginated account-wide threads.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InboundThreadListResponse'
              example:
                data:
                  - id: 33333333-3333-3333-3333-333333333333
                    record_type: email_thread
                    inbox_id: 11111111-1111-1111-1111-111111111111
                    subject: Project update
                    preview: null
                    message_count: 2
                    unread_count: 1
                    last_message_id: 55555555-5555-5555-5555-555555555555
                    last_message_at: '2026-07-15T12:30:00Z'
                    created_at: '2026-07-14T10:00:00Z'
                    updated_at: '2026-07-15T12:30:00Z'
                    labels:
                      - needs_review
                  - id: 44444444-4444-4444-4444-444444444444
                    record_type: email_thread
                    inbox_id: 22222222-2222-2222-2222-222222222222
                    subject: Support request
                    preview: null
                    message_count: 1
                    unread_count: 0
                    last_message_id: 66666666-6666-6666-6666-666666666666
                    last_message_at: '2026-07-15T09:00:00Z'
                    created_at: '2026-07-15T09:00:00Z'
                    updated_at: '2026-07-15T09:00:00Z'
                    labels: []
                meta:
                  page_size: 25
                  page_cursor: >-
                    MjAyNi0wNy0xNVQxMjozMDowMFp8MzMzMzMzMzMtMzMzMy0zMzMzLTMzMzMtMzMzMzMzMzMzMzMz
        '401':
          $ref: '#/components/responses/UnauthorizedResponse'
        '404':
          $ref: '#/components/responses/NotFoundResponse'
        '422':
          $ref: '#/components/responses/ValidationErrorResponse'
        '503':
          description: Inbound thread storage is temporarily unavailable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                errors:
                  - code: '10016'
                    title: Service Unavailable
                    detail: >-
                      Email threads are temporarily unavailable. Please try
                      again later.
      x-codeSamples:
        - lang: JavaScript
          source: |-
            import Telnyx from 'telnyx';

            const client = new Telnyx({
              apiKey: process.env['TELNYX_API_KEY'], // This is the default and can be omitted
            });

            // Automatically fetches more pages as needed.
            for await (const response of client.emailThreads.list()) {
              console.log(response);
            }
        - lang: Python
          source: |
            import os
            from telnyx import Telnyx

            client = Telnyx(
                api_key=os.environ.get("TELNYX_API_KEY"),  # This is the default and can be omitted
            )
            page = client.email_threads.list()
            print(page.data)
        - lang: Go
          source: "package main\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/team-telnyx/telnyx-go\"\n\t\"github.com/team-telnyx/telnyx-go/option\"\n)\n\nfunc main() {\n\tclient := telnyx.NewClient(\n\t\toption.WithAPIKey(\"My API Key\"),\n\t)\n\temailThreads, err := client.EmailThreads.List(context.TODO())\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\tfmt.Printf(\"%+v\\n\", emailThreads.Data)\n}\n"
        - lang: Java
          source: |-
            package com.telnyx.sdk.example;

            import com.telnyx.sdk.client.TelnyxClient;
            import com.telnyx.sdk.client.okhttp.TelnyxOkHttpClient;

            public final class Main {
                private Main() {}

                public static void main(String[] args) {
                    TelnyxClient client = TelnyxOkHttpClient.fromEnv();

                    var page = client.emailThreads().list();
                }
            }
        - lang: Ruby
          source: |-
            require "telnyx"

            telnyx = Telnyx::Client.new(api_key: "My API Key")

            page = telnyx.email_threads.list

            puts(page)
        - lang: PHP
          source: >-
            <?php


            require_once dirname(__DIR__) . '/vendor/autoload.php';


            use Telnyx\Client;

            use Telnyx\Core\Exceptions\APIException;


            $client = new Client(apiKey: getenv('TELNYX_API_KEY') ?: 'My API
            Key');


            try {
              $page = $client->emailThreads->list();

              var_dump($page);
            } catch (APIException $e) {
              echo $e->getMessage();
            }
        - lang: CLI
          source: |-
            telnyx email-threads list \
              --api-key 'My API Key'
components:
  schemas:
    InboundThreadListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/InboundThread'
        meta:
          $ref: '#/components/schemas/PaginationMeta'
      required:
        - data
        - meta
    ErrorResponse:
      type: object
      properties:
        errors:
          type: array
          items:
            $ref: '#/components/schemas/ErrorObject'
        suppressed:
          type: array
          description: >-
            Present when every recipient is suppressed, so the request is
            rejected and no message is created.
          items:
            $ref: '#/components/schemas/SuppressedRecipient'
      required:
        - errors
    InboundThread:
      type: object
      properties:
        id:
          type: string
          format: uuid
        record_type:
          type: string
          enum:
            - email_thread
        inbox_id:
          type: string
          format: uuid
        subject:
          type: string
          nullable: true
        preview:
          type: string
          nullable: true
          maxLength: 200
        message_count:
          type: integer
          minimum: 1
          description: Total inbound and outbound messages in the thread.
        unread_count:
          type: integer
          minimum: 0
          description: >-
            Unread inbound messages; outbound messages never increment this
            count.
        last_message_id:
          type: string
          format: uuid
        last_message_at:
          type: string
          format: date-time
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        labels:
          type: array
          description: >-
            Mutable thread labels used for agent workflow state. Independent of
            the labels on the thread's messages, and distinct from the send-time
            `tags` on outbound messages.
          items:
            type: string
            maxLength: 255
          maxItems: 50
      required:
        - id
        - record_type
        - inbox_id
        - subject
        - preview
        - message_count
        - unread_count
        - last_message_id
        - last_message_at
        - created_at
        - updated_at
        - labels
    PaginationMeta:
      type: object
      properties:
        page_size:
          type: integer
          minimum: 1
          maximum: 100
        page_cursor:
          type: string
          description: Cursor for the next page, when more results are available.
      required:
        - page_size
    ErrorObject:
      type: object
      properties:
        code:
          type: string
          description: >-
            Telnyx error code. Edge idempotency errors use 10027 or 10036.
            Fallback 404/500 responses from the framework may use string status
            codes ('404', '500') instead.
          enum:
            - '10001'
            - '10006'
            - '10007'
            - '10015'
            - '10016'
            - '10019'
            - recipient_suppressed
            - reputation_suspended
            - '404'
            - '500'
            - '10027'
            - '10036'
        title:
          type: string
        detail:
          description: >-
            Human-readable error detail. Changeset responses may return a
            structured object.
          oneOf:
            - type: string
            - type: object
              additionalProperties: true
        source:
          type: object
          additionalProperties: true
          nullable: true
        meta:
          type: object
          additionalProperties: true
          nullable: true
          description: Additional metadata. Present on 401 errors with a documentation URL.
      required:
        - code
        - title
        - detail
    SuppressedRecipient:
      type: object
      properties:
        to:
          type: string
          format: email
          description: Suppressed recipient email address.
        reason:
          type: string
          description: Suppression reason returned by the recipient suppression service.
        scope:
          type: string
          description: Scope at which the suppression applies.
        override_allowed:
          type: boolean
          description: Whether an authorized send may override this suppression.
      required:
        - to
        - reason
        - scope
        - override_allowed
  responses:
    UnauthorizedResponse:
      description: Not authorized (10006).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            errors:
              - code: '10006'
                title: Not authorized
                detail: Invalid API key
                meta:
                  url: https://developers.telnyx.com/docs/overview/errors/10006
    NotFoundResponse:
      description: Resource not found (10001).
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            errors:
              - code: '10001'
                title: Not Found
                detail: The requested resource was not found
    ValidationErrorResponse:
      description: Validation Failed (10015) or changeset validation error.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            errors:
              - code: '10015'
                title: Validation Failed
                detail: subject can't be blank
                source:
                  pointer: /data/attributes/subject
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API key
      description: >-
        Telnyx API key supplied as `Authorization: Bearer <token>`. In
        production, auth may be validated by the API gateway and forwarded via
        Telnyx auth headers.

````