Node.js SDK: Muting agent microphone mid-call returns 403 Forbidden

Building a custom softphone interface in Node.js using the @genesyscloud/genesyscloud SDK. We need to toggle the agent’s microphone during an active voice conversation based on UI controls.

I’m trying to use the putConversationsVoiceParticipant endpoint to update the participant settings. The logic seems straightforward: fetch the conversation, find the local participant, and set mute: true.

Here’s the snippet:

const participantId = 'agent-participant-id-here';
const body = {
 mute: true,
 hold: false
};

try {
 const result = await conversationsApi.putConversationsVoiceParticipant(
 conversationId,
 participantId,
 body
 );
 console.log('Muted:', result);
} catch (error) {
 console.error('Failed to mute:', error.status, error.body);
}

The call fails with a 403 Forbidden. The response body says:

{
 "message": "You are not authorized to perform this action.",
 "status": 403
}

The service account has conversation:view and conversation:write scopes. I verified this by successfully updating the conversation’s custom attributes with the same token. It’s specifically the participant mute action that’s blocked.

Is there a specific permission I’m missing for participant control? Or is putConversationsVoiceParticipant the wrong endpoint for muting the local agent? The docs are a bit sparse on the exact scope requirements for participant-level mutations.