---
title: "Handler for POST /sip/transfer endpoint"
method: POST
path: "/sip/transfer"
tags: ["sip"]
---

# Handler for POST /sip/transfer endpoint

`POST /sip/transfer`

Initiates a SIP REFER transfer for a participant in a LiveKit room.
The transfer moves an ongoing SIP call to a different phone number.

# Arguments
* `state` - Shared application state containing LiveKit handlers
* `auth` - Authentication context for room metadata authorization
* `request` - Transfer request with room name, participant identity, and destination

# Returns
* `Response` - JSON response with transfer status or error

# Errors
* 400 Bad Request - Invalid phone number format or empty fields
* 404 Not Found - Room not found, not accessible, or participant not found
* 500 Internal Server Error - LiveKit not configured or transfer operation failed

# Flow
1. Validate the phone number format
2. Check LiveKit handlers are configured
3. Check room access via metadata auth_id
4. Verify the participant exists and is a SIP participant
5. Execute the SIP transfer
6. Return success or appropriate error

## Request body

- SIPTransferRequest — Request body for initiating a SIP call transfer # Example ```json { "room_name": "call-room-123", "participant_identity": "sip_participant_456", "transfer_to": "+15551234567" } ```
  - `participant_identity` string, required — The identity of the SIP participant to transfer. This can be obtained by listing participants in the room via LiveKit API.
  - `room_name` string, required — The LiveKit room name where the SIP participant is connected
  - `transfer_to` string, required — The phone number to transfer the call to. Supports international format (+1234567890), national format (07123456789), or internal extensions (1234).

## Response `200`

Transfer initiated successfully

- SIPTransferResponse — Response for a successful SIP transfer initiation Note: A successful response indicates the transfer has been initiated, not that it has completed. The actual transfer may take several seconds. # Example ```json { "status": "initiated", "room_name": "call-room-123", "participant_identity": "sip_participant_456", "transfer_to": "tel:+15551234567" } ```
  - `participant_identity` string, required — The identity of the participant being transferred
  - `room_name` string, required — The room name where the transfer was initiated
  - `status` string, required — Status of the transfer request ("initiated" or "completed")
  - `transfer_to` string, required — The normalized phone number with tel: prefix

## Other responses

- `400` — Invalid request (bad phone number or empty fields)
- `404` — Room not found, not accessible, or participant not found
- `500` — LiveKit not configured or transfer failed

## Changes

- **2026-02-08** `0df166d28191` — 2 info
  - the endpoint scheme security `auth` was added to the API
  - the endpoint scheme security `bearer_auth` was removed from the API
- **2025-12-30** `3dea279a6ec1` — 1 info
  - endpoint added
- **2025-11-12** `d85b83f25aea` — 1 breaking
  - api path removed without deprecation

[Change history](https://skmtc.dev/saynaai/apis/sayna-api/changes/sip/transfer/post.md)

---

[API](https://skmtc.dev/saynaai/apis/sayna-api.md) · [All operations](https://skmtc.dev/saynaai/apis/sayna-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/saynaai/sayna-api/revisions/395ce7e35139/schema)
