Quality Scorecard Webhook Payload Stripping Numeric Values Before Data Action Execution

Hi all,

I’m running into a payload issue with the quality:scorecard:completed webhook dropping the actual numeric value. Cross-referencing the official docs, data.score should be a float between 0 and 100, but the live payload is just returning null. This is breaking my ServiceNow REST API call with a 400 error since the qc_calibration_ticket table has that field marked as mandatory for automated ticket creation.

I’ve got a Data Action configured to trigger on the event, and the mapping looks completely clean in the admin UI. I literally dragged data.score straight into the JSON body. Running a test through the webhook inspector shows the structure exactly as expected, but production traffic behaves differently.

My Genesys Cloud instance is on the 2024-08 release, and the ServiceNow side is running Washington DC. The endpoint sits at /api/now/table/qc_calibration_ticket. The payload structure from the official docs matches my configuration, but the actual POST request hits the SN gateway and bounces back with:

{
 "error": {
 "message": "Mandatory field 'score' is missing or null",
 "status": 400
 }
}

I’ve double-checked the Quality Management settings. Scorecards publish immediately, and evaluators are using the standard desktop app. Interestingly, the webhook test button in the integration settings returns a perfect payload with a 92.5 value. Real calls just don’t carry the value over.

I initially thought the score calculation might be async. The docs do mention a background job for complex scorecards, but these are just simple binary rubrics. Plus, the timestamp on the webhook event lines up exactly with the evaluator submission—no delay whatsoever. Looking at the raw JSON in the SN logs, the data object only contains scorecard_id, agent_id, evaluator_id, and status. The numeric field just vanishes. I tried adding a fallback variable in the Data Action to default to 0, but the SN API validation rejects 0 anyway.

The console shows the outbound request firing correctly. Headers are fine, and the auth token rotates properly. It’s just the body that gets mangled. I’m wondering if the quality module needs a specific permission toggle to expose the raw score in webhooks. The payload structure in the Genesys developer portal looks completely different from what actually ships out. Waiting on the background calculation to finish before the webhook fires could explain the null values, but the event type explicitly says completed.

I’m cross-referencing the API reference again for GET /api/v2/quality/scorecards/{scorecardId} and it shows the score field clearly. The webhook payload structure reference just lists it as optional in some edge cases. It’s really strange that the test endpoint works fine but live traffic doesn’t. The SN queue is just sitting there doing jack all. The outbound trace log actually shows the exact moment the field gets stripped:

[2024-08-14T14:22:11Z] OUTBOUND_PAYLOAD_TRANSFORM: removed key 'data.score' due to schema mismatch v2.1
"qc_score_value": {{data.custom_attributes.qc_score}}

The native drag-and-drop mapping tends to drop the decimal formatting. Which completely derails the agent engagement KPIs tracked for quarterly leaderboards. You’ll need to assign the score to a custom text attribute first, then reference that attribute in the webhook payload so the HR reporting suite actually registers the metric.

PlatformClientV2 drops the score field in the webhook envelope, which is why you’re seeing nulls instead of a float. Docs are outdated on this specific event anyway. You’ll need to route this through a Lambda function attached to the EventBridge rule to map data.evaluation.score manually.

const score = event.detail.data.evaluation.score;
return { qc_score_value: score };