---
title: "Filter chat sessions"
method: POST
path: "/chat/sessions/filter"
---

# Filter chat sessions

`POST /chat/sessions/filter`

Search and filter chat sessions with advanced criteria. Supports filtering by date range, channels, status, sentiment, tags, assignees, teams, contacts, language, custom data, and more. Results are paginated and sortable.

## Request body

- FilterSessionsPublicDto
  - `filters` object
    - `date` object — Date range filter on session creation time
      - `from` string, date-time — Start date (ISO 8601)
      - `to` string, date-time — End date (ISO 8601)
    - `channels` SessionChannel[] — Filter by channels (web, email, whatsapp, phone_voice, sms, slack, etc.)
    - `status` integer[] — Filter by status codes (0 = open, 1 = closed_resolved, 2 = closed_unresolved, or custom status IDs)
    - `ai_closure` string[] — Filter by AI closure type (e.g. "handed_off", "resolved", "no_resolution")
    - `sentiment` string[] — Filter by customer sentiment (angry, happy, neutral)
    - `assignees` number[] — Filter by assignee user IDs (empty array = unassigned)
    - `team_ids` string[] — Filter by team/group IDs
    - `contact_ids` string[] — Filter by contact IDs
    - `ticket_number` number — Filter by exact ticket number
    - `language` string[] — Filter by session language codes
    - `tags` string[] — Filter by tag names (sessions must have ALL specified tags)
    - `waiting_on` 'customers' | 'human_agents' — Filter by who the session is waiting on
    - `custom_data` object[] — Filter by session custom data (OR between objects, AND within each object)
  - `sort_by` 'last_message_at' | 'created_at' — Sort field (default: last_message_at)
  - `sort_order` 'asc' | 'desc' — Sort direction (default: desc)
  - `page` number — Page number (1-based, default: 1)
  - `limit` number — Results per page (1-100, default: 25)

## Response `200`

Default Response

- FilterChatSessionsOutput
  - `data` GetChatSessionOutput[], required
    - `id` string, uuid, required
    - `status` 'open' | 'closed_resolved' | 'closed_unresolved', required
    - `ai_closure_type` 'assumed_resolved' | 'handed_off' | 'resolved', nullable, required
    - `sentiment` 'angry' | 'happy' | 'neutral', nullable, required
    - `summary` string, nullable, required — AI-generated summary of the conversation. Populated for both AI-resolved and handed-off sessions once the session has been summarized; null otherwise.
    - `channel` object, required
      - `type` 'web' | 'email' | 'phone_voice' | 'slack' | 'sms' | 'whatsapp' | 'instagram' | 'messenger' | 'api' | 'web_voice', required
    - `contact` object
      - `id` string, uuid, required
      - `email` string, email, nullable, required
      - `phone_number` string, nullable, required
      - `name` string, nullable, required
      - `custom_data` object, nullable, required
      - `created_at` string, required — ISO 8601 timestamp of when the contact was created
      - `updated_at` string, required — ISO 8601 timestamp of when the contact was last updated
      - `non_verified_name` string, nullable, required
      - `non_verified_email` string, nullable, required
      - `non_verified_custom_data` object, nullable, required
    - `language` string
    - `assignee_id` string, nullable
    - `custom_data` object — Session-level custom data stored on the chat session.
    - `team` object
      - `id` string, uuid, required
      - `name` string, required
      - `description` string
    - `handoff` object
      - `sentiment` 'angry' | 'happy' | 'neutral'
      - `summary` string, required
    - `ticketing_system` object
      - `name` 'dynamics365' | 'freshchat' | 'freshdesk' | 'freshdesk_ticketing' | 'front' | 'gorgias' | 'hubspot' | 'infobip' | 'intercom' | 'open' | 'salesforce' | 'salesforce_v2' | 'twilio_flex' | 'zendesk' | 'zendesk_v2', required
      - `external_id` string, required
      - `id_type` 'conversation_id' | 'ticket_id' | 'case_id' | 'conversation_sid', required
    - `ticket_number` number, required
    - `assist_mode` boolean, required
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
  - `page` number, required
  - `limit` number, required
  - `has_next` boolean, required
  - `has_previous` boolean, required

## Other responses

- `500` — Internal Server Error

---

[API](https://skmtc.dev/open/apis/opencx-api.md) · [All operations](https://skmtc.dev/open/apis/opencx-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/open/opencx-api/revisions/57b06b52302d/schema)
