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

Pebble template returns null values in Destination SDK requestBody

  • June 8, 2026
  • 1 reply
  • 18 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.

1 reply

DineshK
Level 2
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