PATCH /conversations/conversations/{conversationId}/participants/{participantId} returns 200 but agent stays on line

Running into a weird state issue with the Conversations API while trying to cleanly drop a participant from a three-party conference. The goal is to disconnect the customer while keeping the agent and supervisor connected. Using the standard PATCH endpoint: PATCH /api/v2/conversations/conversations/{conversationId}/participants/{participantId}.

Sending this JSON body:

{
 "state": "disconnected"
}

The response is a 200 OK with the participant object showing state: "disconnected". Looks good on paper. But when I check the Genesys Cloud UI or query the conversation participants again, the agent is still listed as connected. The call audio cuts out for the customer, but the agent hears silence. It’s not failing, just not cleaning up the state properly.

We’ve tried adding "force": true in the payload, but the API rejects it with a 400 Bad Request. Also tried sending a DELETE request to the same participant endpoint, which just gives a 405 Method Not Allowed. The SDK docs for mobile don’t cover conference leg management directly, so we’re hitting the REST API from our Kotlin backend service. Anyone else see this phantom connection behavior? Is there a specific sequence of calls needed to actually tear down the leg?