e-Invoice
Invoa API e-invoice endpoints: submit an issued invoice or note to LHDN MyInvois, check its validation status, UUID and errors, and cancel it.
These endpoints submit issued documents to LHDN's MyInvois system and report the result. Invoa builds the e-invoice from the issued document, submits it as your intermediary and checks the outcome in the background.
| Method | Path | Scope |
|---|---|---|
POST | /einvoice/{documentId}/submit | einvoice:submit |
GET | /einvoice/{documentId}/status | documents:read |
Before you submit, your company must be connected to MyInvois. See Connect MyInvois. For the rules on who must issue e-invoices, see e-Invoicing in Malaysia.
e-Invoice statuses
The status is stored on the document as einvoiceStatus.
| Status | Meaning |
|---|---|
none | Not submitted. |
queued | Accepted by Invoa, waiting to be sent to LHDN. |
submitted | Sent to LHDN, waiting for validation. |
valid | Validated by LHDN. The document has a UUID and the PDF carries LHDN's QR code. |
invalid | LHDN rejected it. errors explains why. Fix the cause and submit again. |
cancelled | Cancelled at LHDN after validation. |
Submit an e-invoice
POST /api/v1/einvoice/{documentId}/submitQueues the document for submission to MyInvois and returns at once with 202 Accepted. There is no request body. Submitting through the API applies immediately; there is no approval step.
The document must be issued (not a draft or void), of type invoice, credit_note, debit_note, refund_note, self_billed_invoice or consolidated_invoice, and have einvoiceStatus none or invalid.
curl -X POST https://app.invoa.io/api/v1/einvoice/d0c00000-0000-4000-8000-000000000042/submit \
-H "Authorization: Bearer $INVOA_API_KEY"{
"data": {
"id": "d0c00000-0000-4000-8000-000000000042",
"number": "INV-26-0042",
"status": "sent",
"einvoiceStatus": "queued",
"einvoiceErrors": null
},
"jobId": "a1b2c3d4-0000-4000-8000-000000000002",
"status": "queued"
}data is the full document object (shortened above). The top-level status is the submission status, not the document status.
Errors:
422 invalid_stateif the document is a draft or void, is a quotation, proforma, delivery order or receipt, or has already been submitted (for example"e-invoice already queued").404 not_found.
Validation happens in the background. Subscribe to the einvoice.valid and einvoice.invalid webhooks, or poll the status endpoint.
Check e-invoice status
GET /api/v1/einvoice/{documentId}/statuscurl https://app.invoa.io/api/v1/einvoice/d0c00000-0000-4000-8000-000000000042/status \
-H "Authorization: Bearer $INVOA_API_KEY"{
"data": {
"documentId": "d0c00000-0000-4000-8000-000000000042",
"number": "INV-26-0042",
"einvoiceStatus": "valid",
"uuid": "F9D425P6DS7D8IU0A1B2C3D4E5",
"longId": "EXAMPLELONGID0000000000000000000000000000",
"submissionUid": "HJSD135P2S7D8IU0A1B2C3D4E5",
"validatedAt": "2026-10-15T02:16:40.000Z",
"cancelDeadline": "2026-10-18T02:16:40.000Z",
"errors": null
}
}| Field | Type | Description |
|---|---|---|
documentId, number | string | The Invoa document. |
einvoiceStatus | string | See e-Invoice statuses. |
uuid | string or null | LHDN's unique identifier (UIN) for the e-invoice. |
longId | string or null | LHDN's long ID, used in the validation link and QR code. |
submissionUid | string or null | LHDN's ID for the submission batch. |
validatedAt | timestamp or null | When LHDN validated the e-invoice. |
cancelDeadline | timestamp or null | 72 hours after validation. After this, the e-invoice cannot be cancelled. |
errors | array or null | When invalid: a list of { code, message, target?, propertyPath? } from LHDN or from Invoa's checks before submission. |
Errors: 404 not_found.
Cancel an e-invoice
There is no separate cancel endpoint. Void the document with POST /documents/{id}/void before cancelDeadline. Invoa then cancels the e-invoice at LHDN in the background, einvoiceStatus becomes cancelled, and the einvoice.cancelled webhook is sent.
After the 72-hour window, voiding fails with 422 einvoice_window_closed. Issue a credit note against the invoice instead and submit that. See Submit and cancel e-invoices.
Related
Something unclear or out of date? Tell us at hello@invoa.io and we'll fix the page.