Bulk import via sales API fails with data validation errors on customer records containing special characters and missing fields

Our bulk customer import through the Sales Management API is failing with validation errors on approximately 30% of records. We’re migrating 5,000+ customer records from our legacy CRM, and the API rejects records containing special characters in customer names (like O’Brien, José García, or Müller & Sons).

The error response indicates ‘Invalid character in name field’ but doesn’t specify which characters are problematic. We’re also seeing rejections for records we believe have all required fields populated. The bulk import endpoint documentation doesn’t clearly define character restrictions or provide a comprehensive list of mandatory fields beyond the obvious ones like customer name and ID.

Is there a way to get more detailed validation feedback, or does anyone have experience with character encoding requirements for the sales API in wd-r2-2023?

Good point about the GET call. I retrieved sample records and found several fields we weren’t populating: Currency, Payment Terms, and Customer Group. However, I’m still confused about the special character handling. We’re sending JSON with UTF-8 encoding, and our test shows O’Brien works but Müller & Sons fails. Is the ampersand the issue? Should it be & or something else?

Your bulk import failures are stemming from three distinct validation layers that need to be addressed systematically:

1. Special Characters in Names (your primary encoding issue): Workday’s Sales Management API accepts UTF-8 encoded JSON, but you must ensure proper escaping within the JSON structure itself. The key distinction: characters like apostrophes, accented letters (é, ñ, ü), and standard punctuation should be sent as literal UTF-8 characters in your JSON strings - no special encoding needed. However, the ampersand (&) in company names requires careful handling because it can interfere with XML processing in Workday’s backend.

For names containing ampersands, use standard JSON string escaping - the ampersand itself is fine, but ensure there are no trailing/leading spaces that might cause parsing issues. For example: "Müller & Sons" works, but "Müller & Sons " (with trailing space) may fail validation.

The real culprit in your scenario is likely mixed character encoding in your source data. Legacy CRM exports often contain Windows-1252 encoded characters that look correct but aren’t valid UTF-8. Run your input file through a UTF-8 validation tool and re-encode if necessary: `iconv -f WINDOWS-1252 -t UTF-8 input.json > output.json 2. Missing Required Fields (comprehensive field mapping): The bulk import endpoint enforces a broader set of required fields than documented because it triggers the full customer creation business process. Based on wd-r2-2023 configuration, these fields are mandatory for Sales Management customer creation:

  • Customer_Name (obvious)
  • Customer_Reference_ID (your external ID)
  • Customer_Category (typically ‘Business’ or ‘Individual’)
  • Currency_Reference (must match tenant’s enabled currencies)
  • Payment_Terms_Reference (default to ‘Net 30’ if unsure)
  • Worktags (at least one, usually Customer_Group or Region)
  • Bill_To_Contact and Bill_To_Address (even if same as primary)

The validation error ‘missing required fields’ is frustratingly vague because Workday doesn’t specify which fields in the API response. Use this API call to identify the complete field set:


GET /customers/{existing_customer_id}
Include all reference fields

Compare your payload structure against a successfully created customer - any field present in the GET response should be included in your bulk import.

3. Bulk Import Endpoint Behavior (batch processing requirements): The bulk endpoint processes records sequentially and has a strict validation mode. Unlike single-record creation which can use default values, bulk imports require explicit values for all fields. Additionally, the endpoint has a 1000-record per batch limit and a 5MB payload size limit.

Structure your bulk payload with proper error isolation:

{
  "customers": [
    {
      "Customer_Name": "O'Brien Industries",
      "Customer_Reference_ID": "CRM-001",
      "Customer_Category": {"ID": "Business"},
      "Currency": {"ID": "USD"},
      "Payment_Terms": {"ID": "NET_30"}
    }
  ]
}

Recommended Solution Approach:

  1. Pre-process your 5,000 records: validate UTF-8 encoding, normalize special characters, remove trailing spaces
  2. Create a field mapping template based on a GET_Customers call for an existing record in your tenant
  3. Split your import into batches of 500 records (safer than the 1000 limit)
  4. Implement retry logic with detailed error logging for failed records
  5. For the 30% failing records, export them separately and validate each required field is populated with properly encoded values

The combination of character encoding issues and missing conditional required fields explains your 30% failure rate. Once you normalize the encoding and ensure all business-process-required fields are populated, your success rate should exceed 95%.

I recommend enabling the API request logging in your integration settings to capture the exact payload Workday receives. Sometimes the issue is in your middleware layer transforming the data before it reaches Workday. Also check if your tenant has custom validation rules on the Customer object - these won’t appear in standard API documentation but will cause validation failures.

For the missing required fields issue, Workday’s ‘required’ fields can be configured at multiple levels. Some fields are system-required, others are made required through validation rules or business processes. Use the Get_Customers API call to retrieve a few existing customer records and compare the field structure - this will show you all fields that are actually populated in your tenant, including hidden required fields that might not be obvious in the documentation. I’ve found fields like Customer Category, Payment Terms, and Primary Contact often get missed in migrations.