POST /api/v2/conversations/webchat/... cobrowse session init failing with 400

The Rust service in Sao Paulo handles the WebSocket event stream for webchat conversations. We’re trying to spin up a cobrowse session programmatically when a specific error flag hits the notification API. The docs point to POST /api/v2/conversations/webchat/instances/{webchatInstanceId}/cobrowse, but the payload structure isn’t matching what the server expects. Tokio is pushing the request fine and serde serializes the struct without complaints. Yet we’re getting a 400 Bad Request straight back.

Here’s the JSON we’re sending:

{
 "cobrowseSessionId": "generated-uuid-here",
 "initiatorId": "agent-uuid",
 "participantId": "guest-uuid",
 "metadata": {
 "reason": "form-assist"
 }
}

The response just says {"errors":["Invalid request body"]}. We’ve tried swapping participantId for targetId and dropping the metadata block entirely. Nothing sticks. The Rust client uses reqwest::Client::new().post(endpoint).json(&payload).send().await. The OAuth2 token in the header is definitely valid since the same client pulls analytics without issue.

Is there a specific capability flag that needs to set on the webchat instance before this endpoint actually accepts the call? The documentation doesn’t mention any prerequisite routing settings. We’re running the latest Platform SDK bindings locally just to diff the request, but the raw HTTP call feels cleaner for this async pipeline. The cobrowse session ID generation looks standard. Maybe the lifecycle hook expects a different state transition first.

Looking at the raw response headers, it’s definitely hitting the correct route. Just not parsing the body right. The trace logs show the payload hits the gateway but drops right after validation.