Typing indicators not persisting via /api/v2/conversations/messaging/... endpoints

Building a custom web client wrapper around the Genesys Cloud Web Messaging Guest API. Everything works fine for sending text messages, but typing indicators and read receipts are flaky. I’m hitting the standard guest endpoints, specifically POST /api/v2/conversations/messaging/conversations/{conversationId}/messages with messageType set to typing and readReceipt.

The API returns 201 Created immediately, and the response body looks correct:

{
 "id": "msg-123",
 "messageType": "typing",
 "from": {
 "id": "guest-abc",
 "name": "Guest"
 },
 "to": [
 {
 "id": "queue-xyz",
 "name": "Support"
 }
 ]
}

However, the agent in PureCloud doesn’t see the typing state. It flickers for a second then disappears. I’ve checked the WebSocket event stream on the client side and the conversation:participant:added events fire, but the message event for the typing indicator seems to get swallowed or ignored by the platform backend.

I’m using the latest Node SDK @genesyscloud/genesyscloud-messaging for reference, but this is a direct REST call. Is there a specific header required? Or is the messageType enum case-sensitive? I tried typingIndicator instead of typing but that threw a 400 Bad Request with "messageType is not a valid enum value`.

Also, for read receipts, I’m POSTing to the same endpoint with messageType: "readReceipt". The agent sees the message as delivered but not read. Is there a separate endpoint for acknowledging receipt? The docs mention guests/{guestId}/conversations/{conversationId}/read but that requires a different auth token which I don’t have in the guest context.

Any insights on why the typing state isn’t sticking? Or am I missing a step in the handshake? The conversation ID is valid, the guest token is fresh, and the queue is active. Just no typing animation on the agent side.