Unlike credit card decline codes, Visa CEDP errors aren’t displayed to the merchant during the sale. Transactions get processed, and you only realize there was a problem with your CEDP data when the savings fail to appear on your monthly processing statement.
It’s frustrating, especially if your processor or ERP is selling you on a CEDP-compliant setup. Only to find out after the fact that your transactions aren’t passing Visa’s validation.
If this happens to your business, you need to pull your Transaction Detail Report. Visa produces this for acquirers as part of CEDP, and it shows all the transaction-level data, including invalid entries flagged with error codes attached.
This document may live somewhere in your online reporting dashboard. But you likely have to request it directly from your processor.
We’ve grouped all the Visa CEDP error codes by category because reading the list alone is pretty useless. The majority probably won’t apply to you, and a handful of common ones are plaguing most merchants.
Line Item Math Doesn’t Balance
These are the most common CEDP errors we find in automated setups.
- TC50-1004: Line Item Total doesn’t equal quantity times unit cost, less any discount applied to that line
- CS-0011: Amount charged doesn’t equal line totals plus tax and freight, minus invoice-level discounts
- CS-0012: Local Tax Amount doesn’t equal sum of individual tax fields
- TC50-0011: Freight tax doesn’t equal freight amount times the freight tax rate
- TC50-1000: Line Item Detail Sequence Numbers aren’t running in order, starting at 001 and in increments of 1
- TC50-1011: Same sequencing rule as TC50-1000 (above) on submissions where numbering is allowed to start somewhere other than 001
- TC50-1005: Line Item Detail Indicator holds a value outside of 0 through 5
- TC50-1006: Indicators are individually valid but sequenced wrong (Visa wants even values on every line with an odd value closing out the last one)
All of your math needs to match exactly. Even a one-cent rounding error can be the difference between validation and failure. And no partial credit exists on each transaction.
The usual culprit is a rounding mismatch between your invoicing system and gateway, or discounts getting applied at the invoice level while line totals still reflect pre-discount amounts. In these scenarios, the data entry isn’t the problem. It’s a system configuration error that needs to be fixed by your gateway or ERP integration.
Incomplete or Padded Item Descriptions
Everything in this group is one of the primary reasons why CEDP exists. Visa built specific checks to catch enhanced data that was fabricated or generated rather than captured at the time of the transaction.
- TC50-1001: Item Description is blank, null, or all zeros
- TC50-2001: Field is populated but effectively empty
- TC50-2005: A single character is all that came through
- TC50-2004: Text is visible in field, but it’s generic and doesn’t identify what was purchased
- TC50-2002: Description matches merchant name (or close to it)
- TC50-2006: Description sits entirely inside merchant name
- TC50-2003: Line item product code is identical to Cardholder Product ID already on the transaction (single character like S or K)
The main concept here is that Visa wants a readable description of the item or service on every line, and it needs to be unique.
Some of these fields exist because the processors used to just fill blank fields with the merchant’s name, and that’s the exact type of automated padding that CEDP was built to eliminate.
If your report comes back full of these error codes, it means the enhanced data isn’t coming from your invoices and something downstream is filling those fields in. That’s a conversation to have with whoever configured your Level 3 setup.
Product Code and Unit of Measure Failures
- TC50-1002: Product Code is blank, null, or zeros
- TC50-1003: Unit of Measure is blank, null, or all zeros
- TC50-1008: Commodity code on the line isn’t a valid Visa non-fuel product code
Similar to the category above, everything here needs to be completed in its entirety and actually matched to the invoice and a real Visa product code. “Automated” systems that just filled in placeholder numbers will no longer pass validation.
Tax Fields and Treatment Codes
One hard rule that sits underneath most of what’s below: you can’t estimate tax amounts.
The tax figures have to match exactly what’s captured at the time of the sale. And if no tax gets collected, the field gets marked with zeros and the indicator must be marked as exempt.
- CS-0004: Local Tax Included isn’t set to 1 (taxable) or 2 (tax exempt). Zero is not accepted on enhanced data here
- CS-0005: Tax amount came through while the indicator says the line is exempt
- CS-0006: Indicator says taxable but no tax amount was collected or provided
- CS-0007, CS-0008: National Tax Amount and National Tax Included should both be zero but aren’t
- TC50-0010, TC50-0012: Freight was zero, so the freight tax amount and rate both need to be zero too (error comes through if there’s a mismatch)
- TC50-0015: Tax Treatment isn’t one of the five accepted values describing how tax was calculated
- TC50-0014, TC50-1007: Discount Treatment Code on invoice or line item level isn’t 0, 1, or 2
- TC50-0016, TC50-0017, TC50-0018, TC50-0019: Signage on the discount, freight, duty, or tax amount isn’t a recognized value, so Visa can’t tell whether the figure is a credit or debit (zero amount still needs the debit flag)
Every error above looks at a single transaction and asks whether the field is valid. But there are two additional tax-related CEDP error codes that are worth calling out separately, and they look across your entire volume to see whether the tax actually behaves like one.
Both can apply on transactions where nothing is technically wrong with any individual field.
- CS-2001: Local tax amount never changes regardless of the transaction totals
- CS-2002: Rate is static at a level that doesn’t hold up (like a flat state rate applied everywhere you sell)
Both of these errors are usually tied to someone setting a default amount once and never revising it. You can’t find it by looking at a single transaction and checking the fields because they all look fine. It only shows up in the comparison across all transactions with Level 3 data submitted.
Missing or Duplicate Invoice Records
There are two record types for Level 3 submissions:
- PURCHA holds the invoice-level detail
- PURCHL covers the line items
All of the error codes below are tied to issues with these records:
- TC50-0001: PURCHA records are missing or blank
- TC50-0002: PURCHL records are missing or blank
- TC50-0020, TC50-0021: The same two records missing on transactions carrying a purchase type
- TC50-0003: More than one TC50 record type was submitted when only one is allowed
- TC50-0004, TC50-0005: The same PURCHA or PURCHL record was submitted twice
- TC50-0013: Authorization Code on the record doesn’t match the TC50 Authorization Code
Problems With Order Reference, Dates, and Header Fields
Everything below points at the connection between your order system and gateway. It means fields are getting dropped or arriving in the wrong format.
- CS-0002: Purchase Identifier Format isn’t a valid value (1 means order number, 5 means invoice number)
- CS-0003: Format field claims an order or invoice number is coming, and the Purchase Identifier arrived empty
- TC50-0009: Order Date isn’t a valid date in YYMMDD format (if the date is on your invoice, Visa expects it here).
- CS-0010: Time of Purchase isn’t valid in HHMM format (same rule as above, if it’s on the invoice then it belongs in the field)
- CS-0001: Number of Payment Forms isn’t a recognized value (1 or space means paid in full on one card, 2-9 means partial payments, plus sign means more than 9)
- CS-0009: Message Identifier is blank (talk to your acquirer about this one, as it’s theirs to fix)
Read More: How to Qualify for Visa CEDP Rates
Shipping Data Issues
- TC50-0006: Destination postal code doesn’t fit the format for the country you submitted (US addresses need nine digits, and zeros for the last four are acceptable if you don’t have them)
- TC50-0007: Destination Country Code isn’t a valid three-digit ISO code
Both are required when a shipment is involved and the address appears on the invoice. These show up constantly in checkout flows that accept free-text addresses or a default country code that nobody validated.
Fleet and Fuel Error Codes
If you don’t sell fuel, skip this.
Roughly half of the entire CEDP error code list covers fleet transactions. It runs from CS-0014 through CS-0088, plus TC50-1009 and TC50-1010. These errors are mostly tied to:
- Validating purchase types
- Fuel and service type codes
- Odometer readings
- Fuel price math
- Non-fuel product codes
- Blank message identifiers
Since this doesn’t impact the vast majority of merchants enrolled in Visa’s Commercial Enhanced Data Program, I don’t want to overcrowd this specific guide with that information.
You can reach out to me or my team here at MCC directly if you have questions about the error codes in this category. And when I create a standalone guide for fleet and fuel merchants, I’ll drop the link to it here.
