We are building a custom desktop widget using the Embeddable Client App SDK and need to programmatically transfer an active voice call to a specific queue. The agent clicks a button, and our .NET backend hits the Genesys Cloud API to move the interaction.
The endpoint is PATCH /api/v2/conversations/voice/participants/{participantId}. I am passing the routing object with the queueId of the target queue. The payload looks like this:
{
"routing": {
"queueId": "12345678-abcd-1234-abcd-1234567890ab"
}
}
I get a 200 OK back initially, but the call never moves. It stays with the current agent. If I check the conversation history later, there is no transfer event logged. I have verified the queueId is correct and the agent has permission to transfer to that queue manually via the UI.
I tried adding queueName instead of queueId but that gave me a 400 Bad Request saying the queue was not found. I also tried setting transferType to blind in the routing object, but the API docs for voice participants don’t seem to support that field in the patch body, only for the initial routing configuration.
Is there a specific flag I am missing? Or do I need to use a different endpoint like the transfer endpoint under /conversations/voice/transfers? The participant patch docs are a bit vague on whether it supports mid-call queue re-routing or just initial assignment updates. We are using the C# SDK wrapper but falling back to raw HTTP requests for this specific call because the SDK methods for voice participant updates seem limited to mute/unmute status. Any code examples for a successful blind transfer via API would be helpful.