Outbound API: 400 INVALID_VALUE on POST /api/v2/outbound/contactlists

We are trying to automate the creation of outbound contact lists from our custom agent desktop app. The goal is to allow supervisors to bulk upload CSV data directly through our interface without touching the main Genesys Cloud UI. We are using the standard REST API endpoint POST /api/v2/outbound/contactlists.

The request seems straightforward. We are sending a JSON payload with the required fields like name, description, and the contacts array. The payload looks valid to me. Here is a snippet of what we are sending:

{
 "name": "Test_List_001",
 "description": "Automated test list",
 "contacts": [
 {
 "contactId": "12345",
 "phoneNumber": "+15550199876",
 "address": {
 "line1": "123 Main St",
 "city": "Anytown",
 "state": "CA",
 "postalCode": "90210"
 }
 }
 ]
}

When we execute this POST request using our internal HTTP client, the server responds with a 400 Bad Request. The error body contains:

{
 "errors": [
 {
 "code": "INVALID_VALUE",
 "message": "Invalid value for contacts",
 "path": "contacts"
 }
 ]
}

The message is not very helpful. It just says “Invalid value” without specifying which field in the contact object is wrong. I have checked the phone number format. It is E.164. The address fields match the schema definition in the API docs. We also tried removing the address object entirely to see if that was the issue, but the same INVALID_VALUE error persists on the contacts array.

I am wondering if there is a hidden requirement for the contactId field. Does it need to be a GUID? Or maybe the array cannot be empty? We tested with an empty array and got a different error about minimum length, so the array itself is accepted, but the content inside is rejected.

Has anyone hit this specific error when creating lists via API? Is there a stricter validation on the phone number format that the docs don’t mention? Or maybe we are missing a required nested field in the contact object? We are using the latest SDK version for .NET but also tested with raw curl to rule out client-side serialization issues. The curl result is identical.

You’re probably missing the type field or setting it wrong. The API is strict about whether you’re creating a standard list or one tied to a specific campaign. Also, make sure your OAuth token has the outbound:contactlists scope. Without that, you get auth errors, but with the wrong payload structure, you get 400 INVALID_VALUE.

Here’s a minimal working payload that actually creates the list. Don’t overcomplicate it.

{
 "name": "Test List Auto",
 "description": "Created via API",
 "type": "standard",
 "contacts": [
 {
 "phone": {
 "value": "+15551234567"
 },
 "firstName": "John",
 "lastName": "Doe"
 }
 ]
}

If you’re using C#, the PureCloudPlatformClientV2 SDK handles the serialization, but you still need to instantiate the ContactList object correctly. The type property is often overlooked in the docs. If you leave it out, the server assumes a default that might conflict with your intent.

Also, check the contacts array. Each contact needs at least a phone object with a value. If you send a string instead of an object, it fails. The error message isn’t always clear about which field is bad, so validate the structure locally first.

One more thing: the API doesn’t validate phone formats deeply. It accepts what you give it. If the numbers are malformed, the dialer will fail later, not now. So clean your data before sending.

If you’re still stuck, enable debug logging on your HTTP client. Look at the raw response body. Sometimes the error details are in the errors array, not the status code. Check for field references there. It usually points to the exact issue.