Guest API POST /conversations/messaging/message fails with 401 despite valid Bearer token

We’ve been trying to build a custom messaging UI that bypasses the standard Genesys Cloud Messenger widget. The goal is to handle the guest lifecycle directly via the Guest API endpoints.

Getting the conversation started works fine. The POST to /api/v2/conversations/messaging returns a 201 and gives us the conversationId and userId.

The issue hits immediately when trying to send the first message. We’re hitting POST /api/v2/conversations/messaging/{conversationId}/message with a standard JSON body.

{
 "text": "Hello support",
 "from": {
 "id": "{userId_from_create_conversation}"
 }
}

The request always returns a 401 Unauthorized. We’ve double-checked the OAuth token. It’s a valid client_credentials token with the messaging:all scope attached. We’ve verified this same token works perfectly for fetching conversation details via GET.

Looking at the retry logic in our wrapper, it’s not even hitting the retry limit because the auth layer rejects it outright. Is there a specific scope required for the Guest API that isn’t documented clearly, or is the from.id field expecting a different format than the one returned from the creation endpoint?

Headers look standard:
Content-Type: application/json
Authorization: Bearer eyJ...

Feels like a subtle mismatch in the expected user identity for the guest context.