PATCH /api/v2/conversations/{id}/participants/{participantId} 400 Bad Request on attributes update

We are attempting to update participant attributes mid-conversation using the Conversations API. The goal is to push dynamic CRM data back into the Genesys Cloud session context so downstream Architect flows can use it.

We are sending a PATCH request to /api/v2/conversations/voice/{conversationId}/participants/{participantId} with the following JSON payload:

{
 "attributes": {
 "crm_record_id": "12345",
 "priority_level": "high"
 }
}

The request returns a 400 Bad Request with the message: The request was invalid or the resource was not found. We have verified the conversation ID and participant ID are correct by inspecting the webhook payload received earlier. The OAuth token has the conversation:modify scope.

We tried removing the attributes wrapper and sending just the key-value pairs, but that resulted in a 422 Unprocessable Entity. Is there a specific schema requirement for the attributes object? We are using the Terraform CX-as-Code provider to manage the initial flow setup, but this runtime update is handled via a separate Python script hitting the REST API directly.

The documentation mentions that attributes are immutable after creation, but we saw examples of updates in the forum. Are we hitting a limitation with voice conversations specifically? We need this data for the transfer logic.