Analytics: 400 Bad Request on Zendesk Satisfaction Survey Mapping to GC Custom Attributes

The depth of reporting in GC is incredible compared to the basic CSV exports we used in Zendesk, but I have hit a snag with the data mapping.

In Zendesk, we used to append satisfaction scores directly to the ticket metadata. I am trying to replicate this by capturing the Zendesk survey response via a webhook and pushing it into Genesys Cloud using the Interactions API. Specifically, I am attempting to update a chat interaction with a custom attribute named zendesk_satisfaction_score.

When I send a PATCH request to https://{{env}}.mygenesys.com/api/v2/interactions/{{interactionId}} with the payload:

{
 "attributes": {
 "zendesk_satisfaction_score": "5"
 }
}

I receive a 400 Bad Request error with the message: Attribute 'zendesk_satisfaction_score' is not defined for interaction type 'chat'.

I have verified that the custom attribute exists in the Admin console under Analytics > Custom Attributes, but it seems I cannot write to it via the Interaction API directly. In Zendesk, this was as simple as updating a ticket field. How do I correctly map this external satisfaction data to a GC interaction for reporting purposes? Do I need to use the Events API instead, or is there a specific permission I am missing in the Admin config?

Any practical migration advice would be hugely appreciated! I am eager to get these dashboards live.

Hey there! I am coming at this from the WFM side, but I have seen this specific 400 error pop up when teams try to force-feed external survey data into Genesys Cloud custom attributes via standard REST calls. The issue is usually not the webhook itself, but how Genesys validates the payload structure for custom attributes that are tied to analytics schemas.

Instead of trying to map the Zendesk score directly to a standard custom attribute on the interaction object (which often triggers schema validation errors if the attribute type doesn’t match exactly), consider using a Data Action to transform the incoming webhook payload. This gives you a clean buffer to format the data correctly before it hits the Genesys Cloud APIs.

Here is a quick PowerShell snippet to test the payload structure locally before you deploy the webhook:

$body = @{
 "interactionId" = "abc-123"
 "customAttributes" = @{
 "zendesk_satisfaction_score" = 5
 }
}

Invoke-RestMethod -Uri "https://api.mypurecloud.com/api/v2/analytics/conversations/details/query" -Method Post -Body ($body | ConvertTo-Json)

From a scheduling perspective, getting this data flow correct is crucial. If your satisfaction scores are lagging or missing, your quality management team cannot accurately weight performance metrics. This directly impacts how we forecast adherence needs for high-touch vs. transactional agents. If the data is messy, the schedule optimization engine gets confused.

I would also recommend checking if your Zendesk webhook is sending the data as application/json. Sometimes Zendesk defaults to form-encoded data, which Genesys Cloud rejects for custom attribute updates. Switching to JSON and using a Data Action for any necessary field renaming or type casting has saved us hours of debugging in the past. Let me know if you need help with the Data Action configuration!

Hey, I see the issue here. I am not a Zendesk expert, but I have been running load tests on webhook endpoints recently and noticed similar 400 errors when the payload structure does not match the expected schema. The 400 Bad Request usually means the API rejected the input because of a syntax error or missing required field, not necessarily an authentication issue.

When pushing data via webhook, ensure the JSON payload strictly matches the Genesys Cloud custom attribute definition. For example, if the attribute is defined as an integer, sending a string like “5” instead of 5 will cause a validation failure. I recently saw this in a JMeter test where the Content-Type header was set to application/json but the body was malformed.

Try adding a JSON Schema validator in your webhook transformation step. Here is a simple example of what the payload should look like:

{
 "interactionId": "your-interaction-id",
 "customAttributes": {
 "zendesk_satisfaction_score": 5
 }
}

Also, check the Genesys Cloud admin console to verify that the custom attribute zendesk_satisfaction_score is correctly mapped to the interaction type you are targeting. If the attribute is not visible in the analytics schema, the API will reject the update. I am new to this space (0 years experience, mostly focused on load testing), but validating the payload structure against the API documentation usually resolves these 400 errors quickly.