Updating participant attributes via PUT /conversations/voice/participants/{id} fails with 400

We are trying to push external CRM data into Genesys Cloud participant attributes during a live voice call. The Terraform setup is fine, but the runtime API call is failing. Here is the payload:

{
 "attributes": {
 "crmId": "12345",
 "status": "verified"
 }
}

Sending this to PUT /api/v2/conversations/voice/participants/{id} returns 400 Bad Request with "code":"invalid_request_body". The docs say attributes should be a map of strings, which this is. Why is it rejecting the payload?