ServiceNow REST API 400 Bad Request from Genesys Cloud Webhook on Digital Channel Initiation

I’m completely stumped as to why the integration between Genesys Cloud and ServiceNow is failing during the initial handshake for a new digital conversation.

The environment is running Genesys Cloud US East v2. The workflow is triggered via the conversation:created event for a WhatsApp channel. A Webhook is configured to POST to a custom ServiceNow REST API endpoint (/api/now/table/incident) to create a ticket and return a sys_id for correlation. The payload includes the conversation_id, channel_type, and customer phone_number.

The issue is intermittent. Approximately 15% of the time, the Webhook returns a 400 Bad Request with the message: “Mandatory field ‘contact’ is missing or invalid.” However, the JSON body clearly contains the contact object with a valid name and email derived from the contact center directory lookup.

The ServiceNow side logs show the request arriving but rejecting it due to a schema mismatch on the caller_id field, which expects a GlideRecord reference rather than a simple string. The Genesys Cloud side logs only show the 400 status and the raw request body, which appears correct.

Is there a known transformation issue in the Genesys Cloud Webhook payload serialization for digital channels that strips nested objects? Or should I be using a Data Action to handle the field mapping before the Webhook call? The documentation for the webhook resource suggests it passes the body as-is, but the behavior suggests otherwise.