PATCH /api/v2/conversations/voice/{id}/participants not updating queue routing

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:

  1. The OAuth token has conversations:write scope.
  2. The target queueId exists and is active.
  3. The participantId belongs 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?