Pushed the quality evaluation sync connector to client staging org using genesys-cloud-sdk-js@3.75.0. Quality endpoint doing jack all. Console logs show the request payload matches the schema perfectly, yet it’s rejecting POST to /api/v2/quality/evaluations with 409 Conflict. Client’s org shows the form exists. Payload includes correct evaluationFormId and scoreCardId. API throws conflict error every time we’re submitting.
Check your evaluation status. A 409 Conflict on /api/v2/quality/evaluations usually means the system thinks this specific interaction has already been evaluated. Genesys Cloud doesn’t allow duplicate evaluations for the same conversation ID unless you force an overwrite, which isn’t the default behavior for standard submissions.
Here is the structure you need to verify. If the status field in your payload is set to COMPLETED or IN_PROGRESS, and a record already exists for that interactionId, the API rejects it.
const evaluationPayload = {
interactionId: "conversation-uuid-here",
evaluationFormId: "form-uuid-here",
status: "DRAFT", // Start as DRAFT to avoid immediate conflict if unsure
scoreCard: {
scoreCardId: "scorecard-uuid-here",
answers: [
{
questionId: "q1-uuid",
value: "5"
}
]
}
};
await platformClient.qualityApi.postQualityEvaluations(evaluationPayload);
If you are trying to update an existing evaluation, don’t use POST. Use PUT with the evaluation ID in the path:
PUT /api/v2/quality/evaluations/{evaluationId}
Also check the interactionId. Sometimes sync connectors pass the external ID instead of the Genesys Cloud internal conversation ID. If the IDs don’t match what the platform sees as unique, it gets confused. Make sure you are using the UUID from the Genesys Cloud conversation object, not the external CRM ID.
Run a quick GET request first to see if an evaluation exists for that interaction.
GET /api/v2/quality/evaluations?interactionId={conversationId}
If it returns a list, you have a duplicate. If it returns empty, your payload might be missing a required field in the scoreCard array that isn’t being caught by your local validation. Check the questionId values against the form definition.