My App
Guides

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.

List invoices
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.

Create a credit note
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:

codeMeaning
INVOICE_NOT_VALIDThe parent invoice is not Valid
NOTE_IN_PROGRESSAnother note on this invoice is still Pending or Submitted. Wait for LHDN to answer. An Invalid note does not block you.
OVER_CREDITA credit or refund note would take the invoice below zero
DUPLICATE_CODEThe 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.

Submit credit note to LHDN
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.

Check credit note submission status
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:

TypeUse Case
CREDIT_NOTEReduce the invoiced amount (discounts, partial returns, corrections)
DEBIT_NOTEIncrease the invoiced amount (additional charges, undercharging corrections)
REFUND_NOTEFull or partial refund of the invoiced amount
Debit note example
{
  "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
          }
        }
      ]
    }
  ]
}

Next Steps

On this page