POST /api/v2/conversations/calls 400 Bad Request on valid SIP URI

Trying to kick off a system-initiated outbound call via the REST API. The docs say I just need to hit POST /api/v2/conversations/calls with a JSON body containing the to and from addresses. My setup is straightforward. I’m pulling the customer number from our CRM and formatting it as a standard SIP URI. The server address is correct, and the token has the :calls scope. I’ve tested this endpoint in Postman with hardcoded values and it works fine. But when I run it from our integration script, I get a 400 Bad Request. The error message is vague. It just says Malformed participant address.

Here’s the payload I’m sending:

{
 "to": {
 "address": "sip:+493012345678@customer-domain.com",
 "name": "Test Customer",
 "addressType": "user"
 },
 "from": {
 "address": "sip:+491761234567@genesyscloud.com",
 "name": "System Bot",
 "addressType": "user"
 },
 "log": false
}

The from address is a verified outbound address in the admin UI. The to address is a direct SIP URI. I’ve tried changing addressType to phone and removing the sip: prefix, using just +493012345678. Still get the 400. I’ve even tried passing the to address as a plain string without the object wrapper, but that just breaks the schema validation.

Is there a hidden requirement for the to address format? Maybe a specific domain needs to be whitelisted? The error doesn’t give any more details. I’m stuck. The same payload works in Postman but fails in my Python script. Could it be a header issue? I’m using the standard Authorization: Bearer <token> and Content-Type: application/json. The response headers don’t show anything useful. Just 400.

What am I missing here? The docs don’t mention any special formatting for system-initiated calls. I’ve checked the admin UI settings for the outbound address. Everything looks green. No errors. Just this weird 400. I’ve tried adding a callback object, but that didn’t help either. The call just doesn’t start. It’s frustrating. I’ve spent two hours on this. It should be simple. Make a call. Done. But no. The API keeps rejecting it. I don’t know what else to try. The SIP URI looks valid. I’ve validated it with an online SIP parser. It’s fine. So why is Genesys complaining? I need to get this working. Our SLA is slipping. Every minute counts. I’m out of ideas. Help.