Malaysia ๐ฒ๐พ
GoRoute's MyInvois integration is built and tested against LHDN's published SDK samples, but not live: no document has yet been submitted to MyInvois, in pre-production or production. Submission is on hold until LHDN confirms one step of its signature procedure that its published sample does not let us reproduce; GoRoute does not guess it. Until then a Malaysian organisation's invoices are sent the way they are today.
E-invoicing in Malaysia runs through MyInvois, the clearance system of the Inland Revenue Board of Malaysia
(LHDN, also HASiL). An e-invoice is LHDN's own UBL 2.1 document (not Peppol PINT MY): it is signed with an
organisation certificate issued by a Malaysian certification authority licensed by MCMC, submitted to MyInvois, and
valid once MyInvois has validated it. A valid document has a public validation link,
{MyInvois portal}/{UUID}/share/{long ID}, printed on the invoice as a QR code.
Who must issue e-invoices: by annual turnover, in phases since 1 August 2024, and taxpayers below RM 3 million are exempt since 1 September 2026 (LHDN e-Invoice Guideline v4.8, 30 Aug 2026). Taxpayers up to RM 5 million are in a penalty-free relaxation period until 31 December 2027 (LHDN e-Invoice Specific Guideline v4.9, 7 Sep 2026, Table 16.1).
What the integration doesโ
For an organisation in Malaysia that switches MyInvois on, every invoice issued through the API, the portal, the CSV import, drafts, batches and connectors is:
- Built as a MyInvois document, version 1.1 (signed), for the e-invoice types 01 invoice, 02 credit note,
03 debit note, 04 refund note and their self-billed versions 11-14, and checked against MyInvois' field rules as
they apply in production from 24 October 2026. An invoice that breaks a rule is refused with every problem listed
(
C5_MY_DOCUMENT_INVALID,issues[]). - Signed and submitted to MyInvois, several documents per submission (at most 100 documents, 5 MB, 300 KB each), within MyInvois' 72 hours of the issue time.
- Followed until MyInvois validates it (
Valid, with its UUID, long ID and validation link) or finds itInvalid(with LHDN's errors). - Cancelled on request within 72 hours of validation; a document you received can be rejected in the same window.
Connecting: two waysโ
| Your own MyInvois connection (taxpayer system) | GoRoute as your intermediary | |
|---|---|---|
| In MyInvois | register GoRoute's connector as an ERP system; enter its client ID and secret in GoRoute | appoint GoRoute's Malaysian intermediary and grant it permissions |
| Signing certificate | your organisation certificate (TIN and BRN in it), uploaded to GoRoute, held encrypted | the intermediary's |
| Received documents | listed in GoRoute | not visible to an intermediary (LHDN) |
| Available | when the integration goes live | when GoRoute's Malaysian intermediary identity exists (not yet) |
Invoice fieldsโ
On the canonical invoice (POST /api/v1/invoices). A GoRoute service that has these fields checks their values; one
that does not have them drops them without an error. To see which kind of service you are using, send a dry run,
POST /api/v1/invoices/validate, with "my_tax_type": "99" on a line. A service that has the fields refuses it with
422, and the error names my_tax_type ("Input should be '01', '02', '03', '04', '05', '06' or 'E'"). A service that
does not have them answers as if the field were absent. Nothing is sent by a dry run.
| Field | Meaning |
|---|---|
buyer.my_tin, buyer.my_id_type, buyer.my_id_value | The buyer's TIN and its BRN / NRIC / PASSPORT / ARMY number. EI00000000010 is the General Public. |
buyer.my_sst | The buyer's SST registration, or NA |
lines[].my_classification_codes | LHDN classification codes, e.g. ["022"]; mandatory: from the line, or the default your organisation saved (there is no other default) |
lines[].my_tax_type | 01-06 or E; mandatory: from the line (E for an exempt tax category), or the default your organisation saved (there is no other default) |
my_payment_mode | LHDN Payment Mode 01-08; cash, cheque and credit transfer map on their own, a card, direct debit or other payment needs it when a bank account is given |
lines[].my_tariff_code | Product tariff (HS) code for goods |
my_invoice_type_code, my_self_billed | The e-invoice type; derived from document_type when absent |
preceding_invoice.uuid | A note's original e-invoice MyInvois UUID |
my_exchange_rate | The rate to MYR for a document not in MYR |
The seller's TIN, BRN, MSIC code, business activity and telephone come from the organisation's Malaysia settings
(PUT /api/v1/jurisdictions/{code}/settings, with MY as the code). CSV columns: buyer_my_tin, buyer_my_id_type, buyer_my_id_value,
buyer_my_sst, my_invoice_type_code, my_self_billed, my_exchange_rate, my_original_uuid,
my_original_number, line_my_classification, line_my_tax_type, line_my_tariff_code.
Consolidated e-invoicesโ
Sales to buyers who did not ask for an e-invoice can be consolidated monthly into an e-invoice to the General Public, issued within seven days after the month end. Once the integration is live, a preview shows the month's consolidated documents (one line per receipt, per continuous receipt range, or per branch) and the sales that must be issued individually (a single transaction above RM 10,000, and the activities LHDN excludes).
Status of a documentโ
Once the integration is live, each invoice issued through MyInvois shows its MyInvois state: the status, the UUID, the long ID, the validation link, the end of the 72-hour window, LHDN's validation errors, and whether it can be cancelled or rejected now. The endpoints are published in the API reference when the integration goes live.