Skip to main content

Invoice API

Create, read, update, and delete invoices using the NetSuite REST API.


Endpoints​

MethodEndpointDescription
GET/record/v1/invoiceList all invoices
GET/record/v1/invoice/{id}Get specific invoice
POST/record/v1/invoiceCreate new invoice
PATCH/record/v1/invoice/{id}Update invoice
DELETE/record/v1/invoice/{id}Delete invoice

Key Fields​

Header Fields​

FieldTypeDescriptionRequired
idstringInternal ID (read-only)-
tranIdstringInvoice numberAuto-generated
entityobjectCustomer referenceYes
tranDatestringInvoice date (ISO 8601)Yes
dueDatestringPayment due dateAuto-calculated
statusobjectInvoice statusRead-only
subsidiaryobjectSubsidiaryYes (OneWorld)

Financial Fields​

FieldTypeDescription
currencyobjectTransaction currency
exchangeRatenumberExchange rate
subTotalnumberSubtotal (read-only)
taxTotalnumberTotal tax (read-only)
totalnumberGrand total (read-only)
amountPaidnumberAmount paid (read-only)
amountRemainingnumberBalance due (read-only)
termsobjectPayment terms

Billing & Shipping​

FieldTypeDescription
billAddr1stringBilling address line 1
billCitystringBilling city
billStatestringBilling state
billZipstringBilling ZIP
shipAddr1stringShipping address line 1
shipCitystringShipping city
shipStatestringShipping state
shipZipstringShipping ZIP

Other Fields​

FieldTypeDescription
salesRepobjectSales representative
memostringMemo/notes
messageobjectMessage to customer
otherRefNumstringReference number
createdFromobjectSource transaction (e.g., Sales Order)

Sublists​

FieldTypeDescription
itemcollectionLine items

Example: Create Invoice from Sales Order​

POST /record/v1/invoice
Content-Type: application/json
{
"entity": {
"id": "456"
},
"tranDate": "2025-12-25",
"createdFrom": {
"id": "1001"
},
"subsidiary": {
"id": "1"
},
"currency": {
"id": "1"
},
"item": {
"items": [
{
"item": { "id": "789" },
"quantity": 10,
"rate": 99.99
}
]
}
}
Auto-Fill from Sales Order

When you provide createdFrom with a sales order ID, NetSuite auto-fills customer, items, prices, and addresses from the sales order.


Example: Create Standalone Invoice​

POST /record/v1/invoice
Content-Type: application/json
{
"entity": {
"id": "456"
},
"tranDate": "2025-12-25",
"dueDate": "2026-01-24",
"subsidiary": {
"id": "1"
},
"currency": {
"id": "1"
},
"terms": {
"id": "2"
},
"memo": "Professional services - December 2025",
"item": {
"items": [
{
"item": { "id": "999" },
"quantity": 40,
"rate": 150.00,
"description": "Consulting hours",
"amount": 6000.00
}
]
}
}

Example: Update Invoice​

PATCH /record/v1/invoice/5001
Content-Type: application/json
{
"memo": "Updated: Payment plan agreed",
"dueDate": "2026-02-28"
}

Invoice Statuses​

StatusDescription
OPENUnpaid or partially paid
PAID_IN_FULLFully paid
PENDING_APPROVALAwaiting approval (if workflow enabled)
VOIDEDVoided/cancelled

Query Filters​

Find Open Invoices​

GET /record/v1/invoice?q=status='OPEN'

Find Overdue Invoices​

GET /record/v1/invoice?q=dueDate < SYSDATE AND status='OPEN'

Find by Customer​

GET /record/v1/invoice?q=entity='456'

Find by Date Range​

GET /record/v1/invoice?q=tranDate BETWEEN '2025-01-01' AND '2025-12-31'

Find High-Value Invoices​

GET /record/v1/invoice?q=total > 50000

Payment Tracking​

Check Payment Status​

const invoice = await getInvoice(5001);
console.log(`Total: ${invoice.total}`);
console.log(`Paid: ${invoice.amountPaid}`);
console.log(`Remaining: ${invoice.amountRemaining}`);

Apply Payment​

Payments are applied via Customer Payment records:

{
"customer": { "id": "456" },
"payment": 1000.00,
"apply": {
"items": [
{
"doc": { "id": "5001" },
"apply": true,
"amount": 1000.00
}
]
}
}

Important Notes​

Accounting Impact​

Creating an invoice:

  • Debit: Accounts Receivable
  • Credit: Revenue/Income accounts (per line item)
  • Credit: Sales Tax Payable (if applicable)

Revenue Recognition​

  • Revenue is recognized when invoice is created (not when paid)
  • Use revenue recognition features for deferred revenue

Voiding vs Deleting​

  • Void: Reverses accounting impact, keeps audit trail
  • Delete: Only allowed if no payments applied and period unlocked

Credit Limit Check​

NetSuite checks customer credit limit when creating invoices. If exceeded:

  • Invoice can still be created
  • Warning appears in UI
  • May require approval

See Also​