We had a merchant whose "fraud" chargebacks kept creeping up. Fraud tooling showed nothing odd. Cardholders were real, the 3DS pass rate was normal, and the orders shipped.
The reason code on most of them was "unrecognized transaction".
We pulled a sample of settled transactions and compared the descriptor we sent with what showed up in the acquirer's clearing file. We sent ACME GLOBAL MARKETPLACE*ORDER48213 . The file had ACME GLOBAL MARKETPLAC . Our API accepted 40 characters. The acquirer truncated at 22 and kept the front, so the order reference we put at the end of the string was gone, and the brand name was cut mid-word. A customer scrolling their banking app saw something that matched nothing they remembered buying.
The fix was boring.…