Trying to programmatically transfer an active voice call to a different queue using the Genesys Cloud API. The goal is to capture this transfer event in New Relic and correlate it with conversation duration metrics.
I’m sending a PATCH request to /api/v2/conversations/voice/{conversationId}/participants/{participantId} with the following JSON payload to update the routing object:
{
"routing": {
"queueId": "new-queue-id-123",
"priority": 5,
"waitTime": 0
}
}
The API returns a 200 OK status. However, the participant remains in the original queue. Checking the conversation state via GET shows no change in the routing field. The wrapUpCode is not set, and the participant status is still queued.
I’ve verified that:
- The OAuth token has
conversations:writescope. - The target
queueIdexists and is active. - The
participantIdbelongs to the customer, not the agent.
According to the docs, updating routing should re-queue the participant. Is there a specific flag or additional field required? Or is this endpoint only for updating attributes like monitoring or recording?
Here’s the curl command I’m testing with:
curl -X PATCH "https://api.mypurecloud.com/api/v2/conversations/voice/abc-123/participants/def-456" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"routing": {
"queueId": "xyz-789",
"priority": 5
}
}'
The response body confirms the update was accepted but the queue ID in the response still reflects the old one. What am I missing?