Disconnecting specific participant in conference call via C# SDK returns 409 Conflict

Hey folks.

We are building a custom C# agent desktop app using the Embeddable Client SDK. The requirement is to allow the supervisor to kick a specific participant out of an ongoing conference call without ending the entire interaction. I’ve been looking at the Conversations API docs, specifically the DELETE /api/v2/conversations/voice/{conversationId}/participants/{participantId} endpoint.

The logic seems straightforward. We get the conversation ID from the active interaction context. We iterate through the participants to find the one we want to remove. Then we fire off the request. Here is the relevant snippet from our service layer:

var client = new GenesysCloudPlatformClient();
var api = new ConversationsApi(client);
try {
 var result = await api.DeleteVoiceConversationParticipantAsync(conversationId, participantId);
 Console.WriteLine("Participant removed successfully");
} catch (ApiResponseException ex) {
 Console.WriteLine($"Error: {ex.Status} - {ex.Message}");
}

The issue is consistent. When we call this endpoint, we get a 409 Conflict response. The error message says something about the participant state not allowing this action. We’ve verified that the participant is actually in the conference. The conversation state is active. The participant state is connected.

I tried adding a reason query parameter, but the SDK method doesn’t seem to expose that for the delete action. I also tried checking if the participant is on hold, but they are not. We are on US/Pacific time, and this happens regardless of the time of day.

Is there a specific sequence we need to follow? Maybe we need to put the participant on hold first? Or is this endpoint simply not supported for conference calls in the way we are using it? We need a programmatic way to drop a leg of the call.

Any ideas on what we are missing?