NICE CXone Personal Connection outbound call returns 400 Bad Request

Attempting to trigger an outbound call via the Personal Connection API. The payload includes the required campaignId and contactId, but the request consistently returns a 400 error with a generic validation message. Has anyone successfully authenticated this specific operation using a standard OAuth client credentials token, or is there a specific scope requirement I am missing?

The 400 error usually stems from the payload structure rather than authentication, though you’ll want to verify the scope is interactions:write. The Personal Connection API expects a specific nested format for the contact details that doesn’t match the standard interaction create payload.

Here is the working JSON structure I use for my outbound campaigns. Note the routing object is mandatory for queue-based calls.

{
 "campaignId": "your-campaign-id-here",
 "contactId": "your-contact-id-here",
 "routing": {
 "skill": {
 "required": false
 },
 "wrapUpCode": {
 "required": false
 }
 },
 "to": {
 "phoneNumber": "+15550199888"
 },
 "from": {
 "phoneNumber": "+15550199887"
 }
}

If you are using the Python SDK, the request looks like this:

from purecloudplatformclientv2 import InteractionsApi, InteractionCreateRequest

api_instance = InteractionsApi(platform_client)
body = InteractionCreateRequest(
 campaign_id="your-campaign-id",
 contact_id="your-contact-id",
 routing={"skill": {"required": False}},
 to={"phone_number": "+15550199888"},
 from_={"phone_number": "+15550199887"}
)
api_instance.post_interactions_outbound_calls(body=body)

Also check the campaign status. It must be running or scheduled. If the campaign is paused, the API rejects the call immediately with a 400. I often instrument these failures in New Relic by catching the BadRequestException and logging the response body to a custom event. This helps correlate API errors with campaign state changes.

The contactId must belong to the campaignId you specified. Cross-referencing a contact from Campaign A with Campaign B triggers a validation failure.

1 Like