Docs / API reference

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.

MethodPathScope
POST/einvoice/{documentId}/submiteinvoice:submit
GET/einvoice/{documentId}/statusdocuments: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.

StatusMeaning
noneNot submitted.
queuedAccepted by Invoa, waiting to be sent to LHDN.
submittedSent to LHDN, waiting for validation.
validValidated by LHDN. The document has a UUID and the PDF carries LHDN's QR code.
invalidLHDN rejected it. errors explains why. Fix the cause and submit again.
cancelledCancelled at LHDN after validation.

Submit an e-invoice

http
POST /api/v1/einvoice/{documentId}/submit

Queues 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.

bash
curl -X POST https://app.invoa.io/api/v1/einvoice/d0c00000-0000-4000-8000-000000000042/submit \
  -H "Authorization: Bearer $INVOA_API_KEY"
json
{
  "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_state if 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

http
GET /api/v1/einvoice/{documentId}/status
bash
curl https://app.invoa.io/api/v1/einvoice/d0c00000-0000-4000-8000-000000000042/status \
  -H "Authorization: Bearer $INVOA_API_KEY"
json
{
  "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
  }
}
FieldTypeDescription
documentId, numberstringThe Invoa document.
einvoiceStatusstringSee e-Invoice statuses.
uuidstring or nullLHDN's unique identifier (UIN) for the e-invoice.
longIdstring or nullLHDN's long ID, used in the validation link and QR code.
submissionUidstring or nullLHDN's ID for the submission batch.
validatedAttimestamp or nullWhen LHDN validated the e-invoice.
cancelDeadlinetimestamp or null72 hours after validation. After this, the e-invoice cannot be cancelled.
errorsarray or nullWhen 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.

Something unclear or out of date? Tell us at hello@invoa.io and we'll fix the page.