Genesys Cloud JS SDK mute/unmute agent mic during active call

How do I programmatically mute or unmute an agent’s microphone using the Genesys Cloud JavaScript SDK while a voice call is active? I’m building a custom softphone widget and need to sync the UI toggle with the actual audio stream state. I’ve got the conversationId and participantId, but the SDK docs are thin on real-time media control methods. I tried calling client.conversations.calls.updateParticipant with a JSON body setting muted to true, but it either throws a 403 Forbidden or just ignores the request. Is there a specific method on the Call object I’m missing, or is this strictly a server-side API call that requires elevated scopes? Here’s the snippet I’m wrestling with:

const updatePayload = {
 muted: true,
 participantId: currentParticipantId
};

await client.conversations.calls.updateParticipant(conversationId, updatePayload);

It keeps failing auth, even though the token has conversation:write.