Web Messaging SDK startChat() not persisting customAttributes to participant context

Running into a blocking issue with the Genesys Cloud Web Messaging SDK integration. We’ve got the standard iframe embed deployed on our support portal, and the UI renders correctly. The problem surfaces when trying to pass a CRM customer ID into the session before the agent accepts the chat.

We’re attempting to inject the ID via the startChat method using the customAttributes object. The expectation is that this data should be available in the participant context immediately, or at least visible in the conversation history once the agent pulls the chat. Instead, the chat connects, but the custom attribute is missing from the participant profile in the admin UI.

Here is the initialization code we are using on the client side:

const { WebMessaging } = require('@genesyscloud/web-messaging-sdk');

const chatConfig = {
 organizationId: 'our-org-id',
 deploymentId: 'our-deployment-id',
 language: 'en-us'
};

const wm = new WebMessaging(chatConfig);

wm.addEventListener('ready', () => {
 wm.startChat({
 customAttributes: {
 'crm_customer_id': '1234567890',
 'source_page': '/support/login'
 }
 });
});

I’ve verified the deployment ID matches the one in the admin UI. The chat connects successfully. The agent sees the message. However, when I check the participant details via the API (GET /api/v2/conversations/{id}/participants/{participantId}), the customAttributes field is empty.

I’ve tried adding the attributes via wm.updateCustomAttributes after the connection is established, but that also fails to persist. The logs show no errors, just a successful connection event. Is there a specific permission required on the deployment ID to allow custom attributes from the guest SDK? Or is startChat strictly for routing and I need to use a different endpoint to push this data?

Looking for the correct sequence to ensure the CRM ID is attached before the agent interaction begins. The admin UI routing rules depend on this field for skill-based routing, and without it, chats are falling into the default queue.