Set Participant Data action not persisting custom variables to downstream IVR blocks

Trying to pass a custom variable from a previous IVR block into the current flow using the Set Participant Data action. The docs say you can map data actions to participant attributes, but the values seem to vanish once the call hits the next block.

I’ve set up a simple flow: Block A collects input, Block B uses Set Participant Data to store that input, and Block C tries to read it. In Block B, I’m using the JSON payload:

{
 "customData": {
 "sourceChannel": "web",
 "priority": "high"
 }
}

The action reports success in the trace logs, no errors. But when Block C executes, the variable is null or undefined. I’ve checked the participant ID consistency and it’s the same throughout the session. Is there a specific key format required for custom data to persist across blocks? Or is Set Participant Data only meant for system fields like queue name?

Also, tried using the API directly to update participant data via PATCH /api/v2/conversations/conversations/{conversationId}/participants/{participantId}, but that requires admin scopes and feels wrong for runtime IVR logic. The UI action should work. Maybe the issue is with how the data is being referenced in the subsequent block. The expression builder doesn’t show custom data fields in the dropdown, only system fields. Have to manually type the path like conversation.participant.customData.sourceChannel. Could that be it? Path syntax matters.

No obvious errors in the logs, just empty values. The flow continues, but decisions based on that data fail because the variable isn’t there. Restarting the flow doesn’t help. Clearing cache doesn’t help. It’s not a caching issue if the variable never arrives.

Anyone else hit this? Is Set Participant Data broken for custom fields in the current version? Or am I missing a configuration step in the data action setup? The documentation is sparse on persistence rules. Just need the data to stick around for the next block. It’s a basic requirement.