Hey folks,
Trying to push typing indicators from our custom web widget using the Guest API. I’m sending a POST to /api/v2/conversations/messaging/external-contacts/{id}/typing with {"type": "typing"} but nothing shows up in the agent UI. The API returns 200 OK, so the request isn’t failing, but the agent never sees the dots. Am I missing a header or is there a specific event I need to trigger? Here’s the curl I’m using…
Docs state: “To indicate that a participant is typing, send a POST request to /api/v2/conversations/messaging/external-contacts/{id}/typing.”
The endpoint isn’t wrong, but you’re likely hitting a timing issue or using the wrong identifier. The id in the URL must be the externalContactId from the initial POST /api/v2/conversations/messaging/addresses response, not the conversation ID. If you’re using the conversation ID, the API might accept it silently but fail to route the event correctly to the agent UI.
Also, typing indicators are ephemeral. They only show if the agent is actively viewing that specific conversation and the widget is in a “connected” state. If the session has timed out or the agent has switched tabs, the UI won’t render them. You’ll need to ensure the externalContactId is correct.
Here’s the corrected curl command using the proper ID:
curl -X POST "https://api.us.genesyscloud.com/api/v2/conversations/messaging/external-contacts/<EXTERNAL_CONTACT_ID>/typing" \
-H "Authorization: Bearer <ACCESS_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"type": "typing"}'
Check your initial address POST response. It returns an object with conversationId and externalContactId. Use the latter. If you’re still seeing 200 OK but no dots, verify the Authorization header has the messaging:send scope. Without it, the server might accept the request but drop the event.
I’ve seen this happen when developers reuse a token from a different grant type that lacks messaging permissions. The 200 OK is misleading because it confirms the API received the request, not that the event was processed by the UI layer. Double-check your token scopes.