Codes reported by the MyInvois validator on einvoicechecker.com. The rules follow the LHDN MyInvois SDK (sdk.myinvois.hasil.gov.my): Invoice v1.0/v1.1 field specification, code tables and mathematical mappings. The "How to fix" column is our explanation.
Validate a MyInvois document →
Document header
| Code | What it means | How to fix |
|---|---|---|
| MYI-PARSE | The XML or JSON cannot be parsed. | Re-export the document; for JSON check that it is the UBL JSON syntax with "_D", "_A", "_B" and an "Invoice" array. |
| MYI-H00 | The root element is not Invoice. | All MyInvois document types (invoice, credit, debit, refund note and self-billed variants) use the UBL Invoice root; the type is set by InvoiceTypeCode. |
| MYI-H01 | e-Invoice version is not 1.0, 1.1, 1.2 or 1.3. | Set cbc:InvoiceTypeCode/@listVersionID to "1.1" (signed) or "1.0"; 1.2 (unsigned) and 1.3 (signed) only for SVDP disclosures. |
| MYI-H02 | e-Invoice type code is not in the LHDN list. | Use 01 invoice, 02 credit note, 03 debit note, 04 refund note, 11–14 for the self-billed versions. |
| MYI-H03 | e-Invoice code/number missing or longer than 50 characters. | Put your internal invoice number in cbc:ID. |
| MYI-H04 | e-Invoice date missing or not YYYY-MM-DD. | cbc:IssueDate in xsd:date format. MyInvois rejects documents whose issue date/time is more than 72 hours before submission. |
| MYI-H05 | e-Invoice time missing or not in UTC. | cbc:IssueTime as HH:MM:SSZ in UTC, e.g. 03:15:00Z for 11:15 Malaysian time. |
| MYI-H06 | Currency code missing or not ISO 4217. | cbc:DocumentCurrencyCode, e.g. MYR, USD, SGD. |
| MYI-H07 | Foreign currency without exchange rate. | Add cac:TaxExchangeRate with SourceCurrencyCode = document currency, TargetCurrencyCode MYR and CalculationRate. |
| MYI-H08 | Version 1.1 or 1.3 without digital signature. | Sign the document (XAdES enveloped signature in UBLExtensions plus cac:Signature) with your digital certificate, or submit as 1.0 where still accepted. |
| MYI-H09 | Signature present, not verified here (notice). | MyInvois verifies the certificate and digest on submission; this tool only checks presence. |
| MYI-H10 | Credit, debit or refund note without reference to the original e-invoice. | Add cac:BillingReference/cac:InvoiceDocumentReference with cbc:ID (and cbc:UUID from MyInvois); "NA" if the original was not issued through MyInvois. |
| MYI-H12 | SVDP document version 1.2 / 1.3 (notice). | These versions exist only for the Special Voluntary Disclosure Programme and are accepted until 31 December 2027; use 1.0 / 1.1 for normal invoices. |
| MYI-H11 | Payment mode not in the LHDN list. | Use 01 cash, 02 cheque, 03 bank transfer, 04 credit card, 05 debit card, 06 e-wallet, 07 digital bank, 08 others. |
Supplier and buyer
| Code | What it means | How to fix |
|---|---|---|
| MYI-P01 | Supplier or buyer party missing. | AccountingSupplierParty and AccountingCustomerParty are both mandatory. |
| MYI-P02 | Name missing. | cac:PartyLegalEntity/cbc:RegistrationName, max 300 characters. |
| MYI-P03 | TIN missing. | cac:PartyIdentification/cbc:ID with schemeID="TIN". For consolidated B2C use the general TIN EI00000000010, for foreign buyers EI00000000020. |
| MYI-P04 | TIN does not have the LHDN format. | Letters + digits, no spaces or dashes, max 14 characters (e.g. C25845632020 for companies, IG… for individuals). Check it with the MyInvois TIN validation API. |
| MYI-P05 | Registration / identification number missing. | One PartyIdentification with schemeID BRN (business), NRIC (MyKad, MyPR, MyKAS), PASSPORT or ARMY. |
| MYI-P06 | Identification number too long. | NRIC, PASSPORT and ARMY max 12 characters, BRN max 20. The 12-character passport limit is enforced by MyInvois from 23 October 2026. |
| MYI-P07 | NRIC not 12 digits (notice). | Write the MyKad number without dashes, e.g. 880101145678. |
| MYI-P08 | SST registration number missing. | schemeID="SST"; "NA" if the party is not SST-registered. |
| MYI-P09 | SST number format invalid. | At most two numbers separated by ";", only "-" as special character, max 35 characters. |
| MYI-P10 | Supplier tourism tax number missing. | schemeID="TTX"; "NA" if not registered for tourism tax. |
| MYI-P11 | Supplier MSIC code missing. | cbc:IndustryClassificationCode with the 5-digit MSIC 2008 code of the activity. |
| MYI-P12 | MSIC code not in the LHDN list. | Pick the code from the LHDN MSIC sub-category list; 00000 means not applicable. |
| MYI-P13 | Business activity description missing. | Put the activity text in the name attribute of IndustryClassificationCode. |
| MYI-P14 | Contact number missing. | cac:Contact/cbc:Telephone. The buyer may use "NA" only on consolidated invoices. |
| MYI-P15 | Contact number not E.164. | International format with country code and no spaces, e.g. +60123456789. |
| MYI-P16 | E-mail address invalid. | Use a single valid address (RFC 5322) or leave the element out. |
Addresses
| Code | What it means | How to fix |
|---|---|---|
| MYI-A01 | Address missing. | cac:PostalAddress is mandatory for supplier and buyer. |
| MYI-A02 | Address line 0 missing. | At least one cac:AddressLine/cbc:Line; "NA" allowed (then only the state stays mandatory). |
| MYI-A03 | Country missing or not ISO 3166-1 alpha-3. | cac:Country/cbc:IdentificationCode with listID="ISO3166-1" listAgencyID="6", e.g. MYS, SGP. |
| MYI-A04 | City name missing. | cbc:CityName, max 50 characters. |
| MYI-A05 | State missing. | cbc:CountrySubentityCode: 01–16 for Malaysian states and federal territories, 17 for addresses outside Malaysia and consolidated invoices. |
| MYI-A06 | Malaysian state code not in the list. | 01 Johor, 02 Kedah, 03 Kelantan, 04 Melaka, 05 Negeri Sembilan, 06 Pahang, 07 Pulau Pinang, 08 Perak, 09 Perlis, 10 Selangor, 11 Terengganu, 12 Sabah, 13 Sarawak, 14 WP Kuala Lumpur, 15 WP Labuan, 16 WP Putrajaya. |
Invoice lines
| Code | What it means | How to fix |
|---|---|---|
| MYI-L00 | No invoice line. | At least one cac:InvoiceLine. |
| MYI-L01 | Classification code missing. | cac:Item/cac:CommodityClassification/cbc:ItemClassificationCode listID="CLASS", e.g. 022 Others, 004 Consolidated e-Invoice. |
| MYI-L02 | Classification code not in the list. | Use one of the LHDN classification codes 001–045. |
| MYI-L03 | Product tariff code invalid. | listID="PTC", digits and "." only, max 12 (e.g. 9800.00.0010). |
| MYI-L04 | Description missing. | cac:Item/cbc:Description (not only cbc:Name), max 300 characters. |
| MYI-L05 | Unit price missing. | cac:Price/cbc:PriceAmount. |
| MYI-L06 | Subtotal missing. | cac:ItemPriceExtension/cbc:Amount = unit price × quantity, before discounts, charges and tax. |
| MYI-L07 | Line total excluding tax missing. | cbc:LineExtensionAmount. |
| MYI-L08 | Unit of measure not in UN/ECE Rec. 20. | e.g. C62 (one), HUR (hour), KGM (kilogram), XUN (unit). |
| MYI-L09 | Country of origin not ISO alpha-3. | cac:Item/cac:OriginCountry/cbc:IdentificationCode, e.g. MYS. |
| MYI-L10 | Line tax missing. | Every line needs cac:TaxTotal with a TaxSubtotal, also for tax type 06 (not applicable) with amount 0. |
| MYI-L11 | Tax type not in the list. | 01 sales tax, 02 service tax, 03 tourism tax, 04 high-value goods tax, 05 sales tax on low-value goods, 06 not applicable, E exempt. |
| MYI-L12 | TaxScheme not OTH. | cac:TaxScheme/cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6" with value OTH. |
| MYI-L13 | Exemption without reason. | For tax category E add TaxExemptionReason (max 300; allowed specials . - , ( )). |
Totals and calculations
| Code | What it means | How to fix |
|---|---|---|
| MYI-T00 | Mandatory total missing. | TaxExclusiveAmount, TaxInclusiveAmount, PayableAmount and cac:TaxTotal with TaxAmount and at least one TaxSubtotal. |
| MYI-T01 | Invoice-level tax type not in the list. | Same codes as on the lines. |
| MYI-T02 | Invoice-level exemption without reason. | Add TaxExemptionReason for category E. |
| MYI-M01 | Subtotal ≠ unit price × quantity. | Recalculate ItemPriceExtension/Amount. |
| MYI-M02 | Line total ≠ subtotal − discounts + charges. | LineExtensionAmount = ItemPriceExtension − line AllowanceCharge(false) + line AllowanceCharge(true). |
| MYI-M03 | Line tax amount ≠ sum of its subtotals. | Line TaxTotal/TaxAmount must equal its TaxSubtotal amounts. |
| MYI-M04 | Total net amount ≠ sum of line totals. | LegalMonetaryTotal/LineExtensionAmount = Σ line LineExtensionAmount. |
| MYI-M05 | Total discount ≠ invoice-level discounts. | AllowanceTotalAmount = Σ document AllowanceCharge with ChargeIndicator false. |
| MYI-M06 | Total charges ≠ invoice-level charges. | ChargeTotalAmount = Σ document AllowanceCharge with ChargeIndicator true. |
| MYI-M07 | Total excluding tax ≠ net − discounts + charges. | TaxExclusiveAmount = LineExtensionAmount − AllowanceTotalAmount + ChargeTotalAmount. |
| MYI-M08 | Tax per type ≠ sum of line taxes of that type. | Each document TaxSubtotal/TaxAmount = Σ line tax amounts with the same tax type. |
| MYI-M09 | Total tax ≠ sum of tax per type. | TaxTotal/TaxAmount = Σ TaxSubtotal/TaxAmount. |
| MYI-M10 | Total including tax ≠ excluding tax + tax. | TaxInclusiveAmount = TaxExclusiveAmount + TaxTotal/TaxAmount. |
| MYI-M12 | Amount with more than 26 digits. | From 23 October 2026 MyInvois rejects monetary amounts longer than 26 digits; round to 2 decimals. |
| MYI-M11 | Payable amount ≠ including tax − prepayment + rounding. | PayableAmount = TaxInclusiveAmount − PrepaidPayment/PaidAmount + PayableRoundingAmount. |
Frequently asked questions
Is this the same validation as MyInvois?
It implements the field specification, code lists and mathematical mappings published in the LHDN MyInvois SDK. MyInvois additionally checks the digital signature, that the TINs exist, duplicates and the 72-hour submission window, which need access to LHDN systems.
Why do the official SDK sample files fail?
The SDK samples contain placeholders such as "Supplier's TIN" and repeat the same amount in every total field. They show the structure, not a valid document, so the format and calculation rules report them.
Does it support the JSON format?
Yes. Both UBL 2.1 XML and the UBL JSON syntax accepted by MyInvois are parsed into the same model and get exactly the same checks.
Source: LHDN MyInvois SDK, documents and code tables, retrieved 16 October 2026.