Zoom Contact Center API - Interaction mapping failure during Zendesk migration

Zendesk ticket-to-interaction mapping isn’t behaving as expected when pushing custom metadata via the Zoom Contact Center API. The Zoom API returns a 400 Bad Request when attempting to sync ticket IDs to the conversation object, which differs from how Zendesk handles flexible custom fields.

  • Environment: Zoom Contact Center (Production)
  • Endpoint: /contact_center/conversations/{conversationId}
  • Payload: Custom metadata fields for ticket reference
  • Attempted: Implementation of the JSON flattening workaround mentioned in a recent community post

The response body is returning {"status": "error", "message": "Invalid field format"}.

{
 "conversation": {
 "custom_fields": {
 "zendesk_ticket_id": "12345",
 "migration_source": "zendesk_legacy"
 }
 }
}

The 400 error usually happens because the payload doesn’t match the exact conversation object schema. Zoom API is strict with the nesting of custom metadata. Don’t send the ticket ID as a top-level attribute. It needs to be inside the custom_fields map.

If the mapping still fails, check the data type of the field in the Zoom admin portal. If it’s set as an integer but the API sends a string, it’ll reject the request. This is similar to a problem mentioned in an earlier community post about metadata sync. It’s a common mistake when moving from Zendesk since their fields are more flexible.

3 Likes

The schema adjustment worked. Moving the ticket ID into the nested metadata object resolved the 400 error.

the earlier reply is spot on. we hit this same nesting wall on our end - inc-4471 was the ticket. fwiw it’s not just the ticket id, any custom field needs to live inside that metadata block or the api just chokes.

{
 "metadata": {
 "ticket_id": "12345",
 "source": "zendesk"
 }
}

Fun one today. The nesting fix in the earlier reply is correct, but there’s a common gotcha where the API still rejects the payload if the metadata keys aren’t strings.

Cause:

Type mismatching within the nested metadata object. Zoom expects all custom keys and values to be strings, even for numeric ticket IDs.

Solution:

Cast the ticket ID to a string before sending the request:

{
 "metadata": {
 "ticket_id": "12345"
 }
}