Data Action success output is undefined despite valid JSON response from external API

The Data Action is returning undefined for the mapped field in the success output, even though the external API returns a 200 OK with the correct JSON structure. I am trying to pass a customer ID from the Architect flow to a .NET Web API endpoint to fetch some loyalty points, then map those points back into the Architect conversation context.

Here is the Data Action configuration I have set up:

Request:

  • URL: https://internal-api.company.com/v1/loyalty/{customerId}/points
  • Method: GET
  • Headers: Authorization: Bearer {{authToken}}

Response Mapping (Success):

  • Output Variable: loyaltyPoints
  • JSON Path: $.data.points

The external API response looks like this:

{
 "status": "success",
 "data": {
 "customerId": "12345",
 "points": 1500
 }
}

In the Architect flow, I am using a Set Data action to capture the result. The variable loyaltyPoints is consistently showing as undefined in the debug logs. I have verified that the {customerId} is being populated correctly before the Data Action runs. If I change the JSON path to $.status, it correctly returns success. This tells me the Data Action is receiving the response body, but it is failing to parse the nested object path correctly.

I have tried variations like $.data["points"] and just $.points without success. The .NET backend is definitely returning application/json. Is there a known issue with nested object mapping in Data Actions? Or is the JSON path syntax stricter than standard JSONPath? I am stuck on why a simple nested field would fail while a root level field works fine.

The issue is almost certainly in how you’re referencing the response body within the Data Action mapping. Genesys expects the exact JSON path string, not a variable reference, and it’s case-sensitive.

If your .NET API returns a structure like { "points": 150 }, you need to map the output to body.points. If it’s nested, say { "data": { "points": 150 } }, the path becomes body.data.points.

Here is the correct mapping configuration in JSON format for the Data Action output:

{
 "success": {
 "output": {
 "loyaltyPoints": "${body.points}"
 }
 }
}

Make sure the field name in Architect (e.g., loyaltyPoints) matches what you’re trying to access later in the flow. Also, verify that the external API isn’t returning a wrapper object like {"result": { ... }} which would require body.result.points.

I’ve seen this trip people up when the API returns an array instead of an object. If it’s an array, you’d need body[0].points. Check the raw response in the Architect debug logs to be sure.