Troubleshoot Errors

Troubleshoot common errors when using the Conversation Data APIs.

Delete API Errors 

Messaging End User (MEU) Has Open Messaging Sessions (HTTP 412 Error) 

If one or more MEUs have open Messaging sessions, the delete request fails with a 412 Precondition Failed error.

Default behavior: The error message identifies only the first blocking MEU, and errorDetails is empty.

With errorDetailsVerbose=true (Spring ‘26 and later): The response includes a detailed errorDetails array listing every blocking MEU and each of their open session IDs.

1{
2  "errorCode": "PRECONDITION_FAILED",
3  "messageCode": "CORE_PARTICIPANT_ENTITY_IN_OPEN_SESSIONS",
4  "message": "One or more participant entities are still in active MessagingSessions. To proceed, either close these sessions manually or use the ‘forceCloseSessions=true’ query parameter to close them automatically.",
5  "targets": [{ "type": "QUERY_PARAMETER", "reference": "participantEntityId" }],
6  "parameters": [],
7  "errorDetails": [
8    {
9      "type": "PARTICIPANT_ENTITY_IN_OPEN_SESSIONS",
10      "participantEntityId": "0PALT000004IQji",
11      "coreParticipantEntityInOpenSessions": [{ "sessionId": "0MwLT000005TBQd" }]
12    },
13    {
14      "type": "PARTICIPANT_ENTITY_IN_OPEN_SESSIONS",
15      "participantEntityId": "0PALT000004IQjd",
16      "coreParticipantEntityInOpenSessions": [{ "sessionId": "0MwLT000005TBQY" }]
17    }
18  ]
19}

To resolve this error, either close all blocking sessions manually, or add forceCloseSessions=true and errorDetailsVerbose=true to your request to have them closed automatically (Spring ‘26 and later).

Restricted Relationships With Child Objects 

If a messaging end user or their associated MessagingSession or VoiceCall records have child objects with restricted relationships, those child objects block deletion. The most common causes are EngagementAttendee and EngagementTopic records.

Default behavior (Winter ’26 and earlier): The API accepts and queues the request, but deletion fails during processing. The API response doesn’t show the reason for failure. To confirm that the request failed, check the ConversationApiLog object.

With errorDetailsVerbose=true (Spring ‘26 and later): Before queuing the delete job, the API runs a pre-check. If restricted child objects exist, the request fails immediately with a 412 error that identifies the specific object types blocking deletion.

1{
2  "errorCode": "PRECONDITION_FAILED",
3  "messageCode": "CORE_PARTICIPANT_RESTRICTED_CHILD_OBJECTS",
4  "message": "Requested participant entities have restricted child objects both or any of (EngagementAttendee, EngagementTopic) that blocked deletion.",
5  "targets": [{ "type": "QUERY_PARAMETER", "reference": "participantEntityId" }],
6  "parameters": [],
7  "errorDetails": [
8    {
9      "type": "PARTICIPANT_RESTRICTED_CHILD_OBJECTS",
10      "participantEntityId": "0PALT000004IQjs",
11      "coreParticipantRestrictedChildObjects": [{ "entityName": "EngagementTopic" }]
12    }
13  ]
14}

To resolve this error, delete the identified child records manually, then retry the delete request. If no EngagementAttendee or EngagementTopic records exist, review other child objects related to the messaging end user or MessagingSession objects. Custom or managed package objects with restricted relationships can also prevent deletion depending on your org’s configuration.

Without errorDetailsVerbose=true (post-processing failure): If a deletion fails after the job is queued, check the StatusHistory field on the ConversationApiLog record. This can happen on orgs earlier than Spring ‘26, or if errorDetailsVerbose isn’t set. StatusHistory contains a JSON object showing which restricted child object types caused the failure. For example, {"EngagementTopic":true,"EngagementAttendee":false} means EngagementTopic records blocked deletion while EngagementAttendee records didn’t.