CXone Voice API 409 Conflict on Transfer Payload

Building a Python handler for CXone voice transfers. The POST to /restapi/v1.0/account/~/conversations/voice/{conversationId}/transfers keeps throwing a 409 Conflict. Target queue and skill parameters match the specification. Local eligibility checks pass, yet state transitions stall before fallback routing executes. Dropping the payload below. Presence synchronization doesn’t hold during handoffs. IVR simulator tests show the same hang. Audit trail logging fails silently.

{
 "transferType": "attended",
 "targetUri": "queue:~/resource/queues/{queueId}",
 "skillIds": ["skill-1", "skill-2"]
}

You’re hitting a version mismatch. Genesys Cloud blocks the transfer if the conversation state drifts.

const res = await fetch(url, {
 method: 'POST',
 headers: { 'if-match': etag, 'Content-Type': 'application/json' },
 body: JSON.stringify({ targetType: 'queue', target: targetId })
});

Check your etag value?