---
title: "Hand the session off to a human agent"
method: POST
path: "/chat/sessions/{session_id}/handoff"
---

# Hand the session off to a human agent

`POST /chat/sessions/{session_id}/handoff`

Hands the session off to a human agent, re-running the handoff pipeline even if the session is already handed off. Closed sessions are refused with 400.

## Path parameters

- `session_id` string, required

## Response `200`

Default Response

- HandoffSessionOutput
  - `session` 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

## Other responses

- `500` — Internal Server Error

---

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