Cobrowse session init via Conversations API failing with 400

Trying to kick off a cobrowse session from our Android app using the Conversations API. I’m POSTing to /api/v2/conversations/{conversationId}/cobrowse with a standard JSON payload.

The request comes back with a 400 Bad Request and the error message says cobrowseSessionId is required, but I don’t have one yet since I’m trying to create it.

{"cobrowseSessionId": "null"}

Is there a specific endpoint to generate the session token first, or am I hitting the wrong resource entirely?

{
 "initiator": {
 "id": "YOUR_AGENT_ID",
 "type": "agent"
 },
 "participants": [
 {
 "id": "CUSTOMER_EXTERNAL_ID",
 "type": "external"
 }
 ]
}

You’re sending a cobrowseSessionId in the body, which is why the API is throwing that 400. That field is strictly for linking to an existing session, not creating a new one. When you’re initiating a fresh cobrowse interaction via the Conversations API, you need to leave that field out entirely and instead provide the initiator and participants objects.

The endpoint POST /api/v2/conversations/{conversationId}/cobrowse expects you to define who is starting the session and who is being invited. In most hybrid setups, the initiator is your agent (using their internal Genesys ID), and the participants array contains the external customer details. If you’re using the external type for the participant, make sure the id matches the external user ID you registered during the web SDK initialization.

Also, double-check your OAuth scope. You’ll need cobrowse:session:write to actually push this request through. If you’re still seeing issues after dropping the cobrowseSessionId, check the conversation status. Cobrowse sessions can only be initiated on active voice or webchat conversations. If the conversation is queued or closed, the API will reject the payload regardless of the JSON structure.

Here’s what your corrected payload should look like:

{
 "initiator": {
 "id": "agent-genesis-id-here",
 "type": "agent"
 },
 "participants": [
 {
 "id": "customer-external-id-here",
 "type": "external"
 }
 ]
}

This structure tells Genesys to spin up a new session ID internally and assign it to the conversation. No need to pass a null or empty string. Just omit the field.