We’re importing daily bank statements into Cash Management via the REST API. The import runs successfully with a 200 response, but when we check the posted transactions, some are missing. After investigation, we found that transactions containing special characters in the description field (like €, £, or accented characters like é, ñ) are silently skipped.
Example API call:
POST /api/v1/cash/bank-statements
{
"transactions": [
{"amount": 1500.00, "description": "Payment from Société Générale"},
{"amount": 2300.00, "description": "Invoice £2300 settled"}
]
}
The API returns success, but these transactions don’t appear in Cash Management. Transactions with plain ASCII descriptions import fine. Is this an input validation issue, a character encoding problem, or something with the API error handling? Our reconciliation reports are now unreliable because we can’t trust that all transactions were imported.
We are setting UTF-8 in the Content-Type header, so that’s not it. The silent dropping is concerning - shouldn’t the API return an error or at least a warning in the response? How can we know which transactions were skipped?
This is definitely a character encoding issue. Check what encoding you’re sending in the Content-Type header. The API expects UTF-8, but if you’re not explicitly setting it, your HTTP client might be defaulting to ISO-8859-1 or Windows-1252. Add Content-Type: application/json; charset=utf-8 to your request headers.
The API response should include a warnings array even when the status is 200. Check if there’s a warnings or partialSuccess field in the response body. Sometimes it’s there but applications don’t parse it. If you’re logging the full response, look for a section that lists skipped transactions with reasons. That said, the ICS 2021 version had a bug where warnings weren’t always included.
Another thing to check - are you URL-encoding your JSON payload? Some HTTP clients automatically URL-encode the body, which can mangle special characters even if the original encoding was UTF-8. Make sure you’re sending the raw JSON body without additional encoding layers. Also, try logging the exact bytes being sent on the wire using a tool like Wireshark or Fiddler to verify the encoding is correct.