---
title: "Transfer a SIP leg via REFER (asynchronous)"
method: POST
path: "/legs/{id}/transfer"
tags: ["Legs"]
---

# Transfer a SIP leg via REFER (asynchronous)

`POST /legs/{id}/transfer`

Asynchronously transfers a SIP leg. The HTTP call returns 202 as soon as the request is validated; the REFER is sent in the background and its outcome is surfaced through `leg.transfer_initiated` / `leg.transfer_progress` / `leg.transfer_completed` / `leg.transfer_failed` events. Blind transfer when `replaces_leg_id` is omitted; attended transfer when present (the named leg's dialog identity is embedded as a Replaces parameter per RFC 3891). On terminal 2xx the leg (and the replaces leg, if any) is hung up automatically.

## Request body

- TransferRequest
  - `target` string, required — SIP URI to transfer the call to (e.g. "sip:bob@example.com").
  - `replaces_leg_id` string — ID of an existing connected SIP leg whose dialog should be replaced (attended transfer). Omit for blind transfer.

## Response `202`

Transfer request accepted for processing

## Other responses

- `400` — Missing or invalid target URI (including URIs without a host such as sip:)
- `404` — Leg not found
- `409` — Leg not connected, not a SIP leg, or replaces_leg_id is invalid

## Changes

- **2026-04-14** `863dba60b82f` — 1 info
  - endpoint added
- **2026-03-26** `d09c97c6ca8c` — 1 breaking
  - api path removed without deprecation

[Change history](https://skmtc.dev/voiceblender/apis/voiceblender-api/changes/legs/:id/transfer/post.md)

---

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