CXone Personal Connection API returning 400 on outbound call trigger

Trying to kick off an outbound call via the Personal Connection API from a backend service. The docs say I need to hit the /api/v2/insights/interaction endpoint or something similar, but the payload structure for the call type is giving me grief. I’m sending a POST to the correct endpoint with a valid OAuth token. The response is a 400 Bad Request with a generic “Invalid request” message. No specific field errors in the body.

Here’s the JSON payload I’m sending:

{
 "type": "call",
 "direction": "outbound",
 "to": "+15551234567",
 "from": "+15559876543",
 "metadata": {
 "campaignId": "abc-123",
 "userId": "user-456"
 }
}

The from number is definitely registered and verified in the admin UI. The to number is just a test mobile. I’ve tried swapping the metadata fields, removing them, and even adding a connectionId (which I don’t have yet since it’s a new call). Nothing works. The 400 persists.

Is there a required header I’m missing? Or is the type field case-sensitive? I’ve checked the Swagger spec three times. It looks right. The error log on our end just shows the raw 400 response. No stack trace from CXone.

We’re running this in a Node.js environment using the standard fetch API. The auth token is fresh. Scopes include :call:write. I’m stuck. The UI lets me make calls fine. The API won’t. What’s the exact minimal payload for a cold outbound call using Personal Connection? Or is this API actually for internal transfers only and I’m looking at the wrong endpoint entirely? The docs are vague on the distinction between “Personal Connection” and standard outbound campaigns in the code examples.