Updating participant attributes mid-conversation via /api/v2/conversations/interactions fails with 400

I’m trying to update participant attributes on an active conversation using the DFO API. The goal is to push custom data into the interaction context without hanging up.

Here’s the PATCH request to /api/v2/conversations/interactions/{conversationId}:

PATCH /api/v2/conversations/interactions/{conversationId}
Content-Type: application/json

{
 "participants": [
 {
 "id": "{participantId}",
 "attributes": {
 "customKey": "newValue"
 }
 }
 ]
}

The response is a 400 Bad Request. The error message is vague: “Invalid request body.” I’ve verified the participant ID and conversation ID are correct. The attribute key exists in the channel configuration.

Is the payload structure wrong? The docs for InteractionParticipant show attributes as a map of strings. I’m sending a map of strings.

Tried sending the whole participant object back with just the attributes changed. Same error. Tried sending just the attributes object in the root. 404.

What’s the exact JSON shape the API expects for a partial update of participant attributes on an active interaction?