Trying to transfer an active voice call to a specific queue using the Conversations API. The script is running in CXone using the REST Proxy action to hit PATCH /api/v2/conversations/voice/{conversationId}.
The goal is simple. Move the call from the current agent to a new queue without dropping the connection. We’ve got the conversation ID from the script context. The OAuth token has conversation:write and routing:queue.
Here’s the payload:
{
"transferTarget": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"type": "queue"
}
}
The queue ID is correct. Verified it in the admin UI. The call is active. State is connected.
Response is 409 Conflict. The error body says:
{
"code": "conflict",
"message": "Cannot transfer conversation to target",
"status": 409
}
Checked the docs. Nothing specific about this error code for transfers. Tried adding reason field. No change. Tried transferType: "blind". Still 409.
The weird part is manual transfers work. Agent clicks transfer, picks queue, call moves. No issues. API fails every time. Same queue. Same call. Same scopes.
Is there a state requirement I’m missing? Maybe the call needs to be in held state first? Tried holding it via PUT /api/v2/conversations/voice/{id}/hold. Then patched. Still 409.
Also checked if the queue is enabled. It is. Has agents logged in.
Any ideas what’s causing the conflict? Is the PATCH endpoint even the right way to do this? Or should we be using a different resource?
Code is straightforward. No complex logic. Just a direct API call.
action logs show the request goes out. Token is valid. Endpoint is correct.
Stuck on this. Need a programmatic transfer for a specific workflow. Manual isn’t an option.