Data Action: External API 200 OK but Architect variables not populating

Hit a weird wall with a custom Data Action. The external service returns a 200 OK with valid JSON, but the target Architect variables stay null after the step completes. No error in the flow execution log, just silent failure on the mapping side.

Here’s the response payload from the vendor:

{
 "status": "success",
 "data": {
 "customer_tier": "gold",
 "loyalty_points": 1250
 }
}

And the JSON mapping configuration in the Data Action:

{
 "mappings": [
 {
 "source": "$.data.customer_tier",
 "target": "tier_level"
 },
 {
 "source": "$.data.loyalty_points",
 "target": "points_balance"
 }
 ]
}

The variable names tier_level and points_balance match exactly what’s defined in the flow. I’ve checked the JSONPath syntax against the docs and it looks right. Tried using $.customer_tier assuming the wrapper might be stripped, but that didn’t work either.

The external API uses standard HTTPS and returns application/json. Is there a known issue with nested objects in Data Action mappings? Or maybe the JSONPath engine in Architect doesn’t support the $. prefix for the root object in this specific version?

Running this on the Tokyo region. The flow ID is a8b9c0d1-2e3f-4g5h-6i7j-8k9l0m1n2o3p if that helps. Just stuck on why the successful HTTP call isn’t translating to variable updates.

The nested object structure is usually the culprit here. The JSON mapping in Architect expects the path to match the keys exactly, but if the response body has a wrapper like data, you need to drill down into it.

I see you posted the payload but cut off the mapping config. If you are mapping directly to customer_tier, it will fail because that key lives inside data. You need to use dot notation to reach it.

Try updating your variable mapping to look like this:

{
 "customerTier": "{{data.customer_tier}}",
 "loyaltyPoints": "{{data.loyalty_points}}"
}

Also, check the HTTP response headers. If the vendor is sending Content-Type: application/json; charset=utf-8 but the actual byte stream has a BOM or weird encoding, the deserializer might silently drop the content. I’ve seen that break things in the .NET SDK when using HttpClient.

If the mapping looks correct and it’s still null, enable the “Log request and response” toggle in the Data Action step. You’ll see the raw body in the flow execution log. That usually reveals if the JSON is malformed or if the parser is choking on a specific character.

Make sure your target Architect variables are defined as the correct type. If loyalty_points is an int in the JSON but your variable is a string, the mapping might fail silently depending on the step configuration.