Genesys Cloud: PATCH /conversations/.../participants not updating attributes mid-call

Hey everyone,

Running into a weird issue with our Genesys Cloud integration. We’ve got a Node.js service that needs to update participant attributes on the fly during an active voice conversation. Specifically, we’re trying to push a custom attribute transfer_reason to the agent’s participant object so downstream analytics can pick it up.

The flow works fine for initial call setup. But once the call is connected and I try to hit the PATCH endpoint, the request returns a 200 OK, yet the attribute never shows up in the conversation log or the participant object.

Here’s the curl command I’m using for debugging:

curl -X PATCH https://mydomain.mypurecloud.com/api/v2/conversations/voice/{conversationId}/participants/{participantId} \
 -H 'Authorization: Bearer {token}' \
 -H 'Content-Type: application/json' \
 -d '{
 "attributes": {
 "transfer_reason": "escalation_fraud"
 }
 }'

The response is just { "id": "...", "version": 2 }. No errors. Just silence on the data side.

I’ve tried:

  1. Checking the participant ID. It matches the id returned from the GET /conversations/voice/{conversationId} endpoint.
  2. Using the full object payload instead of just attributes. Same result.
  3. Waiting 30 seconds after the call connects before sending the PATCH. No change.

I know you can’t change routing attributes mid-call, but custom metadata should be writable, right? Or am I missing something about how Genesys handles attribute persistence on active voice legs? The documentation implies it’s supported, but my logs are clean.

Is there a specific flag or header I need to include? Or is this a known limitation for voice vs. chat? We’re on the latest API version.

Thanks in advance.