Issue a Credit Note
Create and submit a credit note to correct a previously submitted invoice
A credit note reduces the amount owed on a previously submitted invoice. This guide walks you through finding the parent invoice, creating the credit note, and submitting it to LHDN.
When to Use a Credit Note
Issue a credit note when you need to:
- Apply a discount or rebate after the original invoice was submitted
- Correct an overcharged amount
- Account for returned goods (partial return)
- Adjust pricing errors
For full refunds, consider using a REFUND_NOTE instead. To increase the amount owed, use a DEBIT_NOTE.
Step 1: Find the Parent Invoice
List your invoices to find the one you need to issue a credit note against.
curl -X GET "https://api.bizcare.my/api/v1/invoices?page=1&per_page=10" \
-H "X-Api-Key: biz_test_your-api-key"{
"data": [
{
"id": "f7e6d5c4-b3a2-1098-7654-321fedcba098",
"invoiceCode": 1001,
"type": "INVOICE",
"status": "Valid",
"legalMonetaryTotal": {
"excludingTax": 21000.00,
"includingTax": 23100.00,
"payableAmount": 23100.00
}
}
]
}Note the id of the invoice you want to credit. The invoice must be Valid. A Submitted invoice is refused until LHDN validates it.
You can only create adjustment notes against invoices that belong to your company. The parent invoice must exist and be accessible to your user account.
Step 2: Create the Credit Note
Use the parent invoice's ID in the URL to create a credit note. The credit note's line items describe what is being credited.
adjustmentNoteIssueDate must be today or up to 3 days back on the Malaysian calendar, never in the future. Replace <today, YYYY-MM-DD> with a real date. See Issue dates.
curl -X POST https://api.bizcare.my/api/v1/invoices/f7e6d5c4-b3a2-1098-7654-321fedcba098/adjustment-note \
-H "X-Api-Key: biz_test_your-api-key" \
-H "Content-Type: application/json" \
-d '{
"type": "CREDIT_NOTE",
"adjustmentNoteCode": 1,
"adjustmentNoteIssueDate": "<today, YYYY-MM-DD>",
"lineItems": [
{
"id": "1",
"description": "Discount on Custom ERP Module - Loyalty Rebate",
"unit": {
"count": 1,
"price": 1500.00,
"code": "EA"
},
"taxDetails": [
{
"taxType": "01",
"taxRate": {
"percentage": 10
}
}
]
}
]
}'{
"success": true,
"message": "Adjustment note created",
"data": {
"id": "b2c3d4e5-f6a7-8901-2345-6789abcdef01"
}
}The adjustmentNoteCode is a sequential integer, separate from your invoice codes. Adjustment note codes must be unique within your company for the given adjustment note type.
When a credit note is refused (409)
The server checks the parent invoice before it creates the note. A refusal is 409 with one of these code values:
code | Meaning |
|---|---|
INVOICE_NOT_VALID | The parent invoice is not Valid |
NOTE_IN_PROGRESS | Another note on this invoice is still Pending or Submitted. Wait for LHDN to answer. An Invalid note does not block you. |
OVER_CREDIT | A credit or refund note would take the invoice below zero |
DUPLICATE_CODE | The adjustmentNoteCode is already used |
{
"success": false,
"error": "Adjustment notes can only be created for a Valid invoice. The invoice is currently \"Submitted\".",
"message": "Adjustment notes can only be created for a Valid invoice. The invoice is currently \"Submitted\".",
"code": "INVOICE_NOT_VALID"
}Step 3: Submit to LHDN
Submit the credit note using the adjustment note's ID.
curl -X POST https://api.bizcare.my/api/v1/adjustment-notes/b2c3d4e5-f6a7-8901-2345-6789abcdef01/submit-to-myinvois \
-H "X-Api-Key: biz_test_your-api-key"{
"success": true,
"message": "Submitted successfully",
"data": null
}This response means LHDN took the note for processing. It is not final. The note stays Submitted until LHDN validates it. The submit call also returns 409 INVOICE_NOT_VALID if the parent invoice is no longer Valid.
Step 4: Check Status
Verify the credit note has been accepted by LHDN.
curl -X GET https://api.bizcare.my/api/v1/adjustment-notes/b2c3d4e5-f6a7-8901-2345-6789abcdef01/submitted-documents \
-H "X-Api-Key: biz_test_your-api-key"{
"data": [
{
"id": "c3d4e5f6-a7b8-9012-3456-789abcdef012",
"uuid": "LHDN-CREDIT-NOTE-UUID",
"status": "Valid",
"code": "1",
"type": "CREDIT_NOTE",
"failReason": null,
"createdAt": "2026-03-20T10:15:00.000Z"
}
]
}Other Adjustment Note Types
The same workflow applies to debit notes and refund notes. Change the type field accordingly:
| Type | Use Case |
|---|---|
CREDIT_NOTE | Reduce the invoiced amount (discounts, partial returns, corrections) |
DEBIT_NOTE | Increase the invoiced amount (additional charges, undercharging corrections) |
REFUND_NOTE | Full or partial refund of the invoiced amount |
{
"type": "DEBIT_NOTE",
"adjustmentNoteCode": 2,
"adjustmentNoteIssueDate": "<today, YYYY-MM-DD>",
"lineItems": [
{
"id": "1",
"description": "Additional configuration hours - ERP Module",
"unit": {
"count": 5,
"price": 300.00,
"code": "HUR"
},
"taxDetails": [
{
"taxType": "02",
"taxRate": {
"percentage": 8
}
}
]
}
]
}