CXone Personal Connection API 400 Bad Request on outbound call trigger

Getting a 400 error when trying to kick off an outbound call via the Personal Connection API. The docs say this endpoint is for initiating calls from a specific user’s device, but I’m hitting a wall with the payload structure.

Here’s the request I’m sending to POST /api/v2/outbound/campaigns/{campaignId}/calls:

{
 "contactId": "c-12345",
 "userId": "u-67890",
 "callType": "PERSONAL_CONNECTION",
 "phoneNumber": "+61298765432",
 "metadata": {
 "reason": "follow_up"
 }
}

The response comes back immediately:

{
 "message": "Invalid request body",
 "status": 400,
 "code": "bad.request",
 "errors": [
 {
 "message": "Field 'callType' is not valid for this endpoint",
 "code": "invalid.parameter"
 }
 ]
}

I’ve checked the auth token. It’s a valid client credentials token with outbound:campaign:write and user:call:center:write scopes. The contact and user IDs exist and are active. I can manually start a call from the UI using Personal Connection, so the feature is enabled for this user.

Tried swapping callType to OUTBOUND but that just routes it through the normal campaign queue instead of using the user’s personal line. The API docs for Personal Connection are pretty sparse. Is there a specific header I’m missing? Or is the endpoint path wrong? I’m using Python requests to make the call.

import requests

url = f"{base_url}/api/v2/outbound/campaigns/{campaign_id}/calls"
headers = {
 "Authorization": f"Bearer {access_token}",
 "Content-Type": "application/json"
}
response = requests.post(url, headers=headers, json=payload)

The error is consistent. No variation in the payload fixes it. Looking for anyone who’s actually got this working in a hybrid setup.

The endpoint you’re hitting is for outbound campaigns, not Personal Connection. Personal Connection uses the conversations API, not the outbound campaign API. You need to POST to /api/v2/conversations/calls with a specific participant address type.

Here’s the correct payload structure:

{
 "from": {
 "id": "u-67890",
 "address": "u-67890",
 "addressType": "user"
 },
 "to": [{
 "id": "c-12345",
 "address": "+612987",
 "addressType": "phone"
 }],
 "type": "outbound",
 "media": "audio"
}

The addressType in the from object must be user for Personal Connection. Using phone there causes the 400 error. Also, ensure your OAuth token has the conversation:write scope. Without it, the request fails silently or with a 403. Double-check the scope in your token payload.