POST /api/v2/conversations/calls 400 BAD_REQUEST: 'from' endpoint mismatch in outbound call initiation

Building an outbound dialer module for our custom agent desktop using the Genesys Cloud Embeddable Client App SDK. The goal is straightforward: trigger an outbound call on behalf of the logged-in agent without relying on the standard dialpad, essentially mimicking a click-to-dial action but driven by backend logic.

I’ve been hammering the POST /api/v2/conversations/calls endpoint. The documentation suggests passing the from endpoint as the user object and the to endpoint as the target phone number. Here’s the JSON payload I’m constructing in JavaScript:

{
 "from": {
 "id": "current_agent_user_id",
 "endpointType": "user"
 },
 "to": {
 "phoneNumber": "+15551234567",
 "endpointType": "phone"
 },
 "provider": {
 "id": "default_routing_queue_id",
 "providerType": "routingQueue"
 },
 "wrapUpCode": null
}

The request consistently returns a 400 BAD_REQUEST. The error message is terse: Invalid 'from' endpoint. It feels like the system doesn’t recognize the user ID as a valid endpoint for initiating a call in this context, or perhaps the provider object structure is off. I’ve double-checked the user ID against the GET /api/v2/users/me response, so it’s definitely correct. The routing queue ID is also valid and active.

I tried swapping the from endpoint to a phone type using the agent’s direct line, but that requires knowing the extension beforehand, which defeats the purpose of a dynamic user-based dialer. I also verified the OAuth token has the conversations:write scope.

Has anyone successfully initiated an outbound call via this endpoint where the from is a user object? Or is there a specific permission set I’m missing on the user profile? I’m stuck on this validation error.