Updating Participant Attributes via API during active Voice Interaction

We’re building a custom agent desktop extension using the @genesyscloud/purecloud-platform-client-sdk-javascript. The goal is to fetch real-time customer data from our internal CRM and write it back to the active voice interaction’s participant attributes while the call is live. This way, the agent sees the updated data in the screen pop immediately without waiting for the interaction to end.

I’m using the conversations:interactions:write permission and hitting the endpoint:
PUT /api/v2/conversations/interactions/{interactionId}/participants/{participantId}

Here’s the payload I’m sending:

{
 "attributes": {
 "crm.lastOrderDate": "2023-10-25",
 "crm.loyaltyTier": "Gold"
 }
}

The request returns a 204 No Content, which looks good. However, when I trigger a screen pop using the interaction:participant:updated event or poll the interaction details, the attributes aren’t showing up in the participant.attributes object.

I’ve verified the interaction ID and participant ID are correct by logging them from the initial interaction:created event. I also tried adding a Content-Type: application/json header explicitly, though the SDK usually handles that.

Is there a delay in propagating participant attributes during an active voice session? Or is the PUT /participants/{id} endpoint only meant for routing/skill updates and not for arbitrary key-value pairs?

I noticed in the docs that PUT /interactions/{id} updates the interaction-level attributes, but I need this data tied to the specific agent participant. If I update the interaction-level attributes, will that reflect in the agent’s view?

Any examples of successfully writing dynamic attributes mid-call would be helpful. Right now, we’re stuck with static data from the initial IVR transfer.