
How the Intermediary Model Works
- The platform (not the tenant) holds a Client ID and Client Secret issued by LHDN’s MyInvois developer portal for the intermediary account.
- Every e-invoice submitted by any tenant goes through this same intermediary, with an
onbehalfofheader set to that tenant’s own TIN. - Each tenant must separately authorize the intermediary inside their own MyInvois Portal account before submissions succeed (see Prerequisite below).
Status Card
The LHDN Configuration Status card at the top of the screen shows the current state of your e-invoicing setup:Intermediary Credential Fields
PROCESSOR_ENCRYPTION_KEY environment variable. Only root administrators with direct database access can decrypt these values — the API and web UI never expose unencrypted credentials in responses or logs.
Signing Certificate (for v1.1 / Production)
Uploading a signing certificate switches every tenant’s submissions from unsigned UBL v1.0 documents to digitally signed v1.1 documents with XAdES-RSA signatures. This certificate is required for Production submissions and optional for Sandbox testing.Document Version Rules
- v1.0 (Unsigned): Acceptable for Sandbox testing only. These documents are submitted without a digital signature and cannot be used for legally binding B2B transactions in Production.
- v1.1 (XAdES-RSA Signed): Required for Production B2B submissions. Every invoice is digitally signed by the platform using the certificate configured here, proving authenticity and legal compliance.
Certificate Upload Fields
Setup Steps
Go to Platform Admin → LHDN Intermediary Setup
Enter intermediary credentials
Upload the signing certificate (for Production)
Save and check status
Prerequisite: Tenant Must Authorize the Intermediary
Configuring credentials here is not enough on its own. Each tenant’s MyInvois account must separately grant the intermediary permission before that tenant’s submissions will succeed:Tenant logs in to their own MyInvois Portal account
Go to Settings → ERP / Intermediary
Grant two permissions
- Document - Submit — required for the platform to submit invoices on the tenant’s behalf.
- Document - View — required for the platform to poll submission status.
Where to Get Credentials
OAuth Credentials (Client ID and Client Secret)
- Go to LHDN MyInvois Developer Portal (https://developer.myinvois.hasil.gov.my)
- Log in with the intermediary’s LHDN account credentials
- Navigate to Application Management or OAuth Credentials
- Create a new OAuth application (or use an existing one) with the following scopes:
submit_document— permission to submit e-invoices on behalf of tenantspoll_documents— permission to check submission status
- Copy the Client ID and Client Secret and save them in the form above
Signing Certificate (.p12)
The signing certificate is issued by your certificate authority or provided by LHDN during intermediary registration:- Contact your Certificate Authority or LHDN support to request a signing certificate in PKCS#12 (.p12 or .pfx) format
- The certificate must include:
- A valid RSA private key (minimum 2048-bit)
- The public certificate (signed by a trusted CA or LHDN)
- Full certificate chain
- You will receive a .p12 file and a passphrase to unlock it
- Upload both the file and passphrase in the form above
Intermediary TIN
The Intermediary TIN is your business’s Tax Identification Number registered with LHDN:- Obtain this from your LHDN MyInvois Portal account settings
- It must match the TIN that tenants will use to authorize the intermediary (see Prerequisite section above)
- This TIN is visible to other tenants and in all submission logs — it’s not secret
Frequently Asked Questions
Do tenants need their own MyInvois Client ID and Client Secret?
Do tenants need their own MyInvois Client ID and Client Secret?
A tenant's invoices are stuck as Invalid even though credentials look correct — what should I check?
A tenant's invoices are stuck as Invalid even though credentials look correct — what should I check?
What's the difference between v1.0 and v1.1 documents?
What's the difference between v1.0 and v1.1 documents?
Can different tenants use different environments (one Sandbox, one Production)?
Can different tenants use different environments (one Sandbox, one Production)?
Can I switch from Sandbox to Production without downtime?
Can I switch from Sandbox to Production without downtime?
Are the credentials stored securely?
Are the credentials stored securely?
PROCESSOR_ENCRYPTION_KEY environment variable. The encrypted values are stored in the database, and the API never exposes unencrypted credentials in responses or logs — only masked as •••••••• in the UI. Only direct database access by a root administrator with encryption key access can decrypt these values.What happens if the signing certificate expires?
What happens if the signing certificate expires?
Can I have multiple signing certificates?
Can I have multiple signing certificates?

