PATCH /api/v2/conversations/voice/{conversationId} 412 on participant attributes

I’ve got a background service handling external CRM updates. When a rep changes a field in Salesforce, my service needs to push that status back to Genesys Cloud as a participant attribute on the active voice call.

The token is valid. I’m using the Client Credentials grant. The endpoint is /api/v2/conversations/voice/{conversationId}. I’m sending a PATCH request.

Here’s the payload:

{
 "participants": [
 {
 "id": "8f9a2b3c-1d4e-5f6g-7h8i-9j0k1l2m3n4o",
 "attributes": {
 "crm_lead_score": "85"
 }
 }
 ]
}

The response is a 412 Precondition Failed.

The docs state: “The request will fail if the current state of the resource does not match the expected state.”

I’m not setting an if-match header because I don’t have the ETag. I’m just trying to update a single attribute. Why does the API require a precondition check for a simple attribute update? I’ve tried adding "type": "user" to the participant object but it still fails with 412.

Is there a specific header I’m missing or is the payload structure wrong?