Skip to main content

Period End Journal API

Create, read, update, and delete period-end closing journal entries using the NetSuite REST API.


Endpoints

MethodEndpointDescription
GET/record/v1/periodEndJournalList all period-end journal entries
GET/record/v1/periodEndJournal/{id}Get specific period-end journal entry
POST/record/v1/periodEndJournalCreate new period-end journal entry
PATCH/record/v1/periodEndJournal/{id}Update period-end journal entry
DELETE/record/v1/periodEndJournal/{id}Delete period-end journal entry

Key Fields

Header Fields

FieldTypeDescriptionRequired
idstringInternal ID (read-only)-
tranIdstringTransaction numberAuto-generated
tranDatestringTransaction date (ISO 8601)Yes
postingPeriodobjectAccounting periodYes
subsidiaryobjectSubsidiaryYes (OneWorld)
currencyobjectTransaction currencyYes
exchangeRatenumberExchange rateAuto-calculated
approvedbooleanApproval statusRead-only
reversalDatestringReversal dateNo
reversalDeferbooleanDefer reversalNo
memostringMemo/descriptionNo
tranStatusobjectTransaction statusRead-only

Classification Fields

FieldTypeDescriptionRequired
departmentobjectDefault departmentNo
classobjectDefault classificationNo
locationobjectDefault locationNo

Sublists

FieldTypeDescriptionRequired
linecollectionJournal entry linesYes (min 2)

Example: Create Period End Journal Entry

POST /record/v1/periodEndJournal
Content-Type: application/json
{
"tranDate": "2025-12-31",
"postingPeriod": {
"id": "12"
},
"subsidiary": {
"id": "1"
},
"currency": {
"id": "1"
},
"memo": "December 2025 closing entries - Income summary to retained earnings",
"line": {
"items": [
{
"account": {
"id": "600"
},
"debit": 10000.00,
"memo": "Close revenue accounts",
"department": {
"id": "5"
}
},
{
"account": {
"id": "300"
},
"credit": 10000.00,
"memo": "Transfer to retained earnings"
}
]
}
}

Response

{
"links": [
{
"rel": "self",
"href": "https://1234567.suitetalk.api.netsuite.com/services/rest/record/v1/periodEndJournal/8001"
}
],
"id": "8001",
"refName": "Period End Journal #PEJ-8001",
"tranId": "PEJ-8001",
"tranDate": "2025-12-31",
"postingPeriod": {
"id": "12",
"refName": "Dec 2025"
},
"subsidiary": {
"id": "1",
"refName": "Parent Company"
},
"currency": {
"id": "1",
"refName": "USA"
},
"memo": "December 2025 closing entries - Income summary to retained earnings",
"approved": false,
"tranStatus": {
"id": "APPROVED",
"refName": "Approved"
}
}

Example: Update Period End Journal Entry

PATCH /record/v1/periodEndJournal/8001
Content-Type: application/json
{
"memo": "Updated: December 2025 closing entries - corrected amounts",
"reversalDate": "2026-01-01"
}

Line Item Fields

Each item in the line.items array supports:

FieldTypeDescriptionRequired
accountobjectGL account referenceYes
debitnumberDebit amountConditional
creditnumberCredit amountConditional
memostringLine memoNo
entityobjectCustomer/Vendor/EmployeeNo
departmentobjectDepartmentNo
classobjectClassificationNo
locationobjectLocationNo
subsidiaryobjectLine-level subsidiaryNo
Debit or Credit

Each line must have either a debit OR a credit amount, not both. The line cannot have both fields populated.


Balancing Requirements

Must Balance

The period-end journal entry must balance:

Total Debits = Total Credits

If the journal entry does not balance, NetSuite will reject the transaction with an error.

Example: Balanced Period-End Entry

{
"postingPeriod": {"id": "12"},
"line": {
"items": [
{"account": {"id": "600"}, "debit": 10000.00},
{"account": {"id": "300"}, "credit": 10000.00}
]
}
}

Total Debits: 10,000.00 Total Credits: 10,000.00 Status: Balanced


Query Filters

Find by Date Range

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

Find by Posting Period

GET /record/v1/periodEndJournal?q=postingPeriod='12'

Find by Subsidiary

GET /record/v1/periodEndJournal?q=subsidiary='1'

Find Unapproved Entries

GET /record/v1/periodEndJournal?q=approved=false

Find by Account

GET /record/v1/periodEndJournal?q=line.account='600'

Find Year-End Entries

GET /record/v1/periodEndJournal?q=tranDate LIKE '%-12-31'

Important Notes

Purpose of Period-End Journals

Period-end journals are used for:

  • Closing entries: Transfer income and expense balances to retained earnings
  • Year-end adjustments: Final adjustments before closing the fiscal year
  • Accruals and deferrals: Period-specific adjustments
  • Reclassifications: Correcting account classifications at period end
  • Elimination entries: Consolidation adjustments

Key Differences from Standard Journal Entries

FeatureStandard JEPeriod-End JE
PurposeGeneral accountingPeriod/year-end closing
TimingAny time during periodTypically last day of period
Common useDay-to-day adjustmentsClosing and final adjustments
Posting periodCan be any open periodUsually matches closing period

Accounting Impact

Period-end journal entries:

  • Post to the specified postingPeriod
  • Impact financial statements for that period
  • Commonly used for closing temporary accounts (revenue/expenses) to permanent accounts (retained earnings)
  • Essential for proper period-end close process

Period Locking

  • Cannot create/modify entries in closed periods
  • Cannot delete entries in locked periods
  • Period must be unlocked by administrator
  • Use reversing entries instead of deleting when period is locked

Posting Period Control

  • postingPeriod field allows posting to specific period
  • Transaction date (tranDate) should typically be last day of period
  • NetSuite validates that posting period is open
  • Cannot post to future periods not yet opened

Approval Workflow

  • If approval workflow is enabled, entries require approval before posting
  • Unapproved entries do not impact financial statements
  • Use the approved field to check approval status (read-only)
  • Critical for period-end close controls

Reversing Entries

To create auto-reversing period-end entries:

  1. Set reversalDate to the reversal date (typically first day of next period)
  2. NetSuite automatically creates the reversing entry on that date
  3. Use reversalDefer to defer the reversal if needed
  4. Useful for accruals that reverse in the next period

Multi-Currency Considerations

  • Base currency entries: Set currency to base currency
  • Foreign currency entries: NetSuite calculates exchange rate automatically
  • Exchange rate can be overridden if needed
  • Period-end rates may differ from transaction-date rates

Common Use Cases

1. Close Revenue and Expense Accounts

Transfer net income to retained earnings (year-end closing):

{
"tranDate": "2025-12-31",
"postingPeriod": {"id": "12"},
"subsidiary": {"id": "1"},
"memo": "Year-end closing - Close revenue and expense accounts to retained earnings",
"line": {
"items": [
{
"account": {"id": "400"},
"debit": 500000.00,
"memo": "Close revenue account"
},
{
"account": {"id": "700"},
"credit": 350000.00,
"memo": "Close expense accounts"
},
{
"account": {"id": "300"},
"credit": 150000.00,
"memo": "Net income to retained earnings"
}
]
}
}

2. Period-End Accrual with Reversal

Record accrued expenses that reverse next period:

{
"tranDate": "2025-12-31",
"postingPeriod": {"id": "12"},
"subsidiary": {"id": "1"},
"reversalDate": "2026-01-01",
"memo": "December accrued utilities - reverses Jan 1",
"line": {
"items": [
{
"account": {"id": "620"},
"debit": 3500.00,
"memo": "Utilities expense"
},
{
"account": {"id": "200"},
"credit": 3500.00,
"memo": "Accrued expenses"
}
]
}
}

3. Depreciation Expense (Month-End)

Record monthly depreciation:

{
"tranDate": "2025-12-31",
"postingPeriod": {"id": "12"},
"subsidiary": {"id": "1"},
"memo": "December depreciation expense",
"line": {
"items": [
{
"account": {"id": "680"},
"debit": 12500.00,
"memo": "Monthly depreciation expense"
},
{
"account": {"id": "160"},
"credit": 12500.00,
"memo": "Accumulated depreciation"
}
]
}
}

4. Bad Debt Expense (Year-End)

Adjust allowance for doubtful accounts:

{
"tranDate": "2025-12-31",
"postingPeriod": {"id": "12"},
"subsidiary": {"id": "1"},
"memo": "Year-end adjustment - Allowance for doubtful accounts",
"line": {
"items": [
{
"account": {"id": "650"},
"debit": 25000.00,
"memo": "Bad debt expense"
},
{
"account": {"id": "105"},
"credit": 25000.00,
"memo": "Allowance for doubtful accounts"
}
]
}
}

5. Prepaid Expense Adjustment

Adjust prepaid insurance to expense:

{
"tranDate": "2025-12-31",
"postingPeriod": {"id": "12"},
"subsidiary": {"id": "1"},
"memo": "December insurance expense - amortize prepaid",
"line": {
"items": [
{
"account": {"id": "630"},
"debit": 1000.00,
"memo": "Insurance expense - December"
},
{
"account": {"id": "110"},
"credit": 1000.00,
"memo": "Prepaid insurance"
}
]
}
}

6. Inventory Adjustment (Period-End)

Adjust inventory to match physical count:

{
"tranDate": "2025-12-31",
"postingPeriod": {"id": "12"},
"subsidiary": {"id": "1"},
"memo": "Year-end inventory adjustment - physical count variance",
"line": {
"items": [
{
"account": {"id": "700"},
"debit": 5000.00,
"memo": "Cost of goods sold - inventory shortage"
},
{
"account": {"id": "120"},
"credit": 5000.00,
"memo": "Inventory"
}
]
}
}

Period-End Close Workflow

Typical Month-End Close Process

  1. Run preliminary reports - Review trial balance and financials
  2. Record adjusting entries - Use period-end journals for accruals, deferrals, etc.
  3. Post period-end journals - Ensure all adjustments are approved and posted
  4. Review final financials - Verify accuracy of financial statements
  5. Close the period - Lock the period to prevent further changes
  6. Archive reports - Save final versions of financial statements

Year-End Close Specifics

For fiscal year-end:

  1. Record all annual adjustments (depreciation, bad debt, inventory, etc.)
  2. Close temporary accounts (revenue/expenses) to retained earnings
  3. Verify tax accounts and provisions
  4. Review intercompany eliminations (OneWorld)
  5. Finalize and approve year-end financial statements
  6. Close all periods in the fiscal year
  7. Begin new fiscal year

See Also