Trying to transfer a live call to a different queue using PATCH on /api/v2/conversations/calls/{callId}. Sending a JSON body with {"actions": [{"actionType": "transferTo", "to": {"id": "queue_id_here", "type": "queue"}}]} results in a 400 Bad Request with no helpful error message. The call remains active but doesn’t move. Is the transferTo action only valid for agents or do I need a different endpoint for queue-to-queue?
The 400 error usually hits because transferTo needs a valid reasonCode. You can’t just drop the queue ID in there. Architect handles this differently than the raw API.
Try adding the reason code to your action payload. It looks like this:
{
"actions": [
{
"actionType": "transferTo",
"to": { "id": "queue_id_here", "type": "queue" },
"reasonCode": "queue_transfer"
}
]
}
Adding the reason code is step one, but you’re still going to hit a wall if you don’t check the queue’s inbound flow settings. The API accepts the transfer, but the conversation dies silently if the target queue isn’t configured to accept it from the source.
Make sure the destination queue has an inbound flow that matches the media type. If you’re transferring a voice call to a queue with only a chat flow, or vice versa, the system rejects it. Also, verify the caller ID. Some queues have strict IVR logic that drops calls if the originating number doesn’t match a known pattern.
Here’s a safer curl test to isolate the API issue from the routing logic:
curl -X PATCH "https://api.mypurecloud.com/api/v2/conversations/calls/{callId}" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"actions": [
{
"actionType": "transferTo",
"to": { "id": "target_queue_id", "type": "queue" },
"reasonCode": "queue_transfer"
}
]
}'
Check the target queue’s inbound flow media type. If it’s voice, you’re good. If it’s empty, you’ll get a 400 or a silent drop.