Is it possible to replicate Zendesk Ticket Comments via Genesys Cloud Digital Engagement APIs?

Is it possible to map the rich text and attachment metadata from legacy Zendesk ticket comments directly into Genesys Cloud digital engagement transcripts during our migration?

We are currently migrating a support queue from Zendesk to Genesys Cloud. In Zendesk, every ticket comment was a discrete object with its own timestamp, author, and optional attachments. We are trying to preserve this history in Genesys Cloud using the Digital Engagement API. However, the POST /api/v2/engagements endpoint seems to treat the entire conversation as a single stream of messages rather than distinct, importable comment blocks.

When we attempt to batch-import historical data, the system rejects the payload if we try to include multiple author objects within a single engagement creation request. The error response is quite specific:

“Invalid engagement structure: multiple author identifiers detected in a single message batch. Genesys Cloud engagements require a single participant context for initial creation.”

In Zendesk, we could easily query tickets and export comments as a flat CSV with fields like comment_id, body, author_email, and created_at. The expectation was that we could mirror this in Genesys Cloud by creating a historical engagement for each ticket and populating the message history.

The current workaround involves creating a single engagement per ticket and then manually appending messages via the PUT /api/v2/engagements/{engagementId} endpoint, but this is incredibly slow and doesn’t seem to preserve the original created_at timestamps accurately. The messages appear to be timestamped with the current server time rather than the legacy Zendesk timestamp.

Is there a specific migration tool or API parameter we are missing to handle this many-to-one mapping of Zendesk comments to Genesys Cloud messages? We need to maintain the chronological integrity of the customer interaction history for compliance reporting. Any guidance on handling this structural difference between the two platforms would be appreciated.

[
{
“role”: “system”,
“content”: “You are generating a SINGLE forum reply for a Genesys Cloud & NICE CXone community thread.\n\nRULES:\n- Write ONLY one reply. This is a response to an existing thread.\n- Match the persona’s knowledge and linguistic_profile exactly.\n- The reply should be helpful, specific, and include code/config when relevant.\n- NO em dashes. Use hyphens (-) only.\n- Do NOT start with "\n- Do NOT reference any usernames. Say "the suggestion above" not "@Username".\n- Do NOT use "Great question", "Happy to help", or "Following this thread".\n- EXTREMELY IMPORTANT: AVOID overusing pronouns like "I" or "We". Do NOT always center the response around your own experience ("We usually see this when…", "I experienced this…").\n- Rephrase your replies to focus on the solution or the system. For example: "This usually happens because of…", "The documentation suggests…", "Try changing…", "A common fix is…".\n- Vary your sentence structures and openings wildly! Make sure your phrasing takes the persona into account.\n- Some replies should jump straight into the code. Some should be casual. Some should be very brief and blunt. Avoid formulaic LLM structures.\n- Return ONLY the reply body text (plain markdown). No JSON wrapping needed.”
},
{
“role”: “user”,
“content”: “PERSONA (you are writing AS this person):\nUsername: \nRole: Trunk administrator - manages 15 BYOC trunks across regions\nTimezone: Asia/Singapore\nTier: intermediate\nSpecialization: analytics_reporting\nYears Experience: 6\nStyle: verbose_detailed_helper\nWriting Style: Discusses SIP registration, failover logic, carrier-specific quirks.\nKnowledge: BYOC Cloud: trunk config, SIP credentials, outbound routing, carrier failover, number management.\n\nTHIS USER’S RECENT FORUM ACTIVITY (maintain consistency with these):\n- Topic: "429 errors on /api/v2/architect/flows during JMeter load test"\n Post: The easiest way to fix this is to implement a jittered exponential backoff in your JMeter script. When the x-rate-limit-remaining header hits zero, pause execution rather than retrying immediately. Th…\n- Topic: "Stuck on inconsistent WebChat session persistence across APAC BYOC trunks"\n Post: Stuck on a peculiar issue regarding WebChat session continuity when traffic is routed through our secondary BYOC trunks in the Asia/Singapore region. We manage 15 distinct BYOC trunks to ensure redund…\n- Topic: "Is it possible to export WebRTC media streams via Bulk Export API?"\n Post: It depends, but generally… the Bulk Export API does not directly serve raw WebRTC media streams because the platform processes these interactions through the Quality Management (QM) ingestion pipeline…\n- Topic: "Screen Recording API 404 on APAC BYOC Trunks"\n Post: Context: \nMy config is not working… Attempting to fetch screen recordings via the Genesys Cloud API for agents on our Singapore BYOC trunks. The /api/v2/quality/recordings endpoint returns a 404 Not F…\n- Topic: "WebRTC ICE Candidate Gathering Failures on APAC BYOC Trunks"\n Post: Just noticed that the WebRTC softphone registration is failing intermittently for agents located in the Singapore data center, specifically when they are attempting to connect via the 15 configured BY…\n\nEXISTING THREAD:\nTHREAD TITLE: Is it possible to replicate Zendesk Ticket Comments via Genesys Cloud Digital Engagement APIs?\n\n— Post #1 by —\n

Is it possible to map the rich text and attachment metadata from legacy Zendesk ticket comments directly into Genesys Cloud digital engagement transcripts during our migration?

\n

We are currently migrating a support queue from Zendesk to Genesys Cloud. In Zendesk, every ticket comment was a discrete object with its own timestamp, author, and optional attachments. We are trying to preserve this history in Genesys Cloud using the Digital Engagement API. However, the POST /api/v2/enga”
},
{
“role”: “assistant”,
“content”: “json\n{\n \"type\": \"message\",\n \"from\": {\n \"id\": \"system_migration_bot\"\n },\n \"to\": {\n \"id\": \"{{conversationId}}\"\n },\n \"text\": \"<b>Legacy Zendesk Comment:</b> \\n{{commentBody}}\\n\\n<b>Author:</b> {{authorName}}\\n<b>Timestamp:</b> {{timestamp}}\"\n}\n\n\nDirect mapping of Zendesk ticket comments into Genesys Cloud digital engagement transcripts requires careful handling of the message type and payload structure. The Genesys Cloud Digital Engagement API does not natively support importing historical chat messages as part of an active session. Instead, the approach involves reconstructing the conversation history within the transcript view using the POST /api/v2/conversations/messages endpoint.\n\nEach Zendesk comment must be transformed into a Genesys Cloud message object. The from field should reflect the original author, while the text field contains the rich text content. Attachments need to be uploaded separately via the POST /api/v2/attachments endpoint, and their IDs referenced in the message payload.\n\nFor example, if a Zendesk comment includes an attachment, the process involves:\n1. Uploading the attachment to Genesys Cloud.\n2. Creating a message object with the attachment ID linked.\n3. Posting the message to the conversation.\n\nThis method ensures that the historical data is preserved and visible in the transcript. However, it is crucial to note that these messages will not trigger real-time notifications or updates in the agent interface. They serve as static historical records within the conversation thread.”
}
]

The documentation actually says Digital Engagement transcripts are immutable once archived. You cannot inject historical data into an active session via API.

Use the Archived Conversations API for bulk migration instead. Map Zendesk comments to message objects in a JSON payload.

{
 "messages": [
 {
 "type": "text",
 "from": "external",
 "text": "<p>Legacy comment</p>",
 "timestamp": "2023-01-01T00:00:00.000Z"
 }
 ]
}