Pebble template returns null values in Destination SDK requestBody | Community
Skip to main content
Level 2
June 8, 2026
Question

Pebble template returns null values in Destination SDK requestBody

  • June 8, 2026
  • 2 replies
  • 45 views

We are configuring a destination in Adobe Experience Platform using Destination SDK server configuration. We are able to create the connection and send profiles to the destination, but the payload is resolving to null values even though the source attributes are populated.

We are using PEBBLE_V1 in the requestBody template and referencing nested profile attributes under personal_details, we are looking for guidance on whether there is any syntax issue in the template logic that could cause populated fields to resolve as null.

structure:
{
  "templatingStrategy": "PEBBLE_V1",
  "value": "{\n  \"items\": [\n    {% for profile in input.profiles %}\n    {\n      \"firstname\": {% if profile.personal_details.first_name is empty %}null{% else %}\"{{ profile.personal_details.first_name }}\"{% endif %},\n      \"lastname\": {% if profile.personal_details.last_name is empty %}null{% else %}\"{{ profile.personal_details.last_name }}\"{% endif %},\n      \"emailaddress\": {% if profile.personal_details.email_address is empty %}null{% else %}\"{{ profile.personal_details.email_address }}\"{% endif %}\n    }{% if not loop.last %},{% endif %}\n    {% endfor %}\n  ]\n}"
}

Is there anything in the Pebble syntax or request body formatting that could cause values to render as null even when the mapped attributes are present?

Any suggestions would be appreciated.

2 replies

DineshK
Level 3
June 8, 2026

Hi ​@Rrffgg
 

The issue is your attribute path. In Destination SDK's Pebble context, profile attributes don't sit directly under profile — they live under profile.attributes, and each field is a wrapper object so you need .value at the end to get the actual string.

So profile.personal_details.first_name should be profile.attributes.personal_details.first_name.value.

Your corrected template:

 

{
"templatingStrategy": "PEBBLE_V1",
"value": "{\n \"items\": [\n {% for profile in input.profiles %}\n {\n \"firstname\": {% if profile.attributes.personal_details.first_name.value is empty %}null{% else %}\"{{ profile.attributes.personal_details.first_name.value }}\"{% endif %},\n \"lastname\": {% if profile.attributes.personal_details.last_name.value is empty %}null{% else %}\"{{ profile.attributes.personal_details.last_name.value }}\"{% endif %},\n \"emailaddress\": {% if profile.attributes.personal_details.email_address.value is empty %}null{% else %}\"{{ profile.attributes.personal_details.email_address.value }}\"{% endif %}\n }{% if not loop.last %},{% endif %}\n {% endfor %}\n ]\n}"
}

Before deploying, use the template rendering API to test this against a sample profile — saves a lot of back and forth:

 

POST https://platform.adobe.io/data/core/activation/authoring/testing/template/render

Pass your template and a sample profile payload in the request body and it'll show you the exact rendered output. Catches path issues like this immediately.

Ref: https://experienceleague.adobe.com/en/docs/experience-platform/destinations/destination-sdk/testing-api/streaming-destinations/render-template-api

Devyendar
Level 7
July 21, 2026

Hi ​@Rrffgg 
I agree with ​@DineshK  point

The first thing to validate is the actual Pebble context path. In Destination SDK, the populated XDM field may not be available directly as profile.personal_details.first_name; it often needs to be referenced from the exported profile structure, such as under profile.attributes...value.

One additional thing I would check is whether those attributes are actually included in the destination activation mapping. A field can be visible in Profile UI but still not be present in the payload sent to the destination if it was not selected/mapped for activation or if the field path differs from the raw XDM schema path.

The easiest way to confirm is to use the render template API and first print the raw profile object, then update the Pebble paths based on the actual rendered structure.