myinvois

Submit an E-Invoice to LHDN MyInvois

Step-by-step walkthrough for submitting an invoice, credit note, debit note, or refund note to LHDN MyInvois from IntBooks. Covers field validation, signing, UIN retrieval, and rejection handling.

Last updated:

This article walks you through submitting a single invoice to LHDN MyInvois from IntBooks. The same flow applies to credit notes, debit notes, and refund notes — the document type is the only difference. By the end you’ll have a UIN-stamped, QR-coded e-invoice that satisfies LHDN’s mandatory submission within 72 hours of issue.

Prerequisites

Before your first submission, verify that:

  1. Your MyInvois connection is active in Settings → Compliance → MyInvois (green checkmark)
  2. Your digital certificate is uploaded and the expiry is at least 30 days away
  3. Your organization has a valid TIN and MSIC code
  4. The customer has a valid TIN (for B2B) — for B2C use the generic consumer TIN EI00000000010
  5. The invoice has at least one line item with an SST classification

Step 1: Create or open the invoice

Either create a new invoice via Create Your First Invoice or open an existing draft invoice from AR → Invoices. Only invoices in Draft status can be submitted to MyInvois — once submitted, the invoice transitions to Submitted and the line items are locked.

Step 2: Run the pre-submit validator

Click the Validate button on the invoice toolbar. The pre-submit validator runs all 30+ MyInvois schema checks locally, before sending anything to LHDN:

  • All 55 mandatory fields are present and non-empty
  • TIN format is valid for both issuer and recipient
  • MSIC code is in DOSM’s valid list
  • SST classification codes are valid for the issuer’s industry
  • Line totals balance (sum of line items = subtotal)
  • Tax calculations are arithmetically correct (tax = taxable amount × rate)
  • Currency code is ISO 4217
  • Invoice date is within 72 hours of today (LHDN rejects backdated submissions)

Validation errors appear in a panel at the top of the invoice with the field path and a fix suggestion. Fix each error and re-validate. The button turns green when the invoice is ready.

Step 3: Submit to MyInvois

Click Save & Submit to MyInvois. The system:

  1. Generates the UBL 2.1 XML payload from the invoice data
  2. Signs the payload with your private key
  3. Posts the signed payload to LHDN’s MyInvois API
  4. Polls for the validation result (LHDN’s validation runs asynchronously)
  5. Stores the response on the invoice

Total submission time: 1 to 5 seconds for invoices that pass on the first attempt.

Step 4: Verify the response

After submission you’ll see one of three outcomes:

Green — accepted with UIN

LHDN accepted the document and assigned a Unique Identification Number (UIN). The UIN appears at the top of the invoice and the QR code is generated and embedded in the PDF. The invoice transitions to Submitted status. The UIN is the legal proof that the invoice has been recorded with LHDN — keep it on file forever.

Yellow — pending

LHDN is still processing the submission. This usually clears within 30 seconds for individual invoice submissions, but can take up to 5 minutes during peak hours (last day of the month, etc.). IntBooks polls automatically every 10 seconds and refreshes the page when LHDN responds — you don’t need to do anything.

Red — rejected

LHDN rejected the submission. The rejection reason and field path appear on the invoice. Common rejection reasons:

ReasonCauseFix
TIN_NOT_FOUNDIssuer or recipient TIN doesn’t exist in LHDN’s databaseVerify the TIN with the customer; check for typos
MSIC_INVALIDMSIC code not in DOSM’s listLook up the correct MSIC code at dosm.gov.my
TAX_CLASSIFICATION_MISMATCHSST code on the line doesn’t match the issuer’s registrationUpdate the line’s SST classification
LATE_SUBMISSIONInvoice date is more than 72 hours oldIssue a new invoice with today’s date
LINE_TOTAL_MISMATCHSubtotal doesn’t equal sum of line itemsRe-save the invoice; usually a rounding difference
DUPLICATE_DOCUMENTA document with the same number already exists in LHDNCheck the previous submission record

Fix the underlying issue, then click Resubmit to MyInvois on the invoice. The system will not issue a new invoice number — the same number is re-submitted with the corrections.

Step 5: Send the e-invoice to your customer

Once the green checkmark appears, click Send to Customer. The PDF includes:

  • Your company logo and contact details
  • The customer’s details (name, TIN, address)
  • The line items with SST classification and rate
  • The totals (subtotal, SST, total)
  • The MyInvois UIN in the document header
  • The MyInvois QR code (scannable to verify the document with LHDN)
  • A payment link or DuitNow QR if you’ve enabled them in Settings → Payments

The customer can verify the invoice by scanning the QR code with the official MyInvois mobile app, which queries LHDN’s database in real time.

Step 6: What happens next

After submission, the invoice is part of LHDN’s permanent record. IntBooks stores the full submission audit trail on the invoice:

  • Submission timestamp
  • Signed XML payload (downloadable)
  • LHDN response payload
  • UIN
  • QR code image
  • Customer 72-hour acceptance window status

The customer has 72 hours from issue to reject the e-invoice via the MyInvois portal. If the customer rejects, you receive an in-app notification and the invoice transitions to Rejected by Customer — you must then issue a credit note (which is also submitted to MyInvois).

If the customer doesn’t reject within 72 hours, the e-invoice is automatically accepted and is final.

Submitting credit notes and debit notes

The flow is identical to invoices, with two differences:

  1. The document type is Credit Note or Debit Note (picked from the dropdown when creating the document)
  2. The document must reference the original invoice UIN in the linked-document field — IntBooks populates this automatically when you click Issue Credit Note from an existing invoice

Credit notes reduce the customer’s balance. Debit notes increase it. Both are submitted to MyInvois the same way as invoices and assigned their own UINs.

Bulk submission

If you have many invoices waiting to submit (e.g., after a long offline period), use AR → Invoices → Bulk Submit to MyInvois. The bulk submitter processes invoices in batches of 100 and shows live progress. Failed invoices are listed at the end with their rejection reasons so you can fix them in bulk.

What’s next?