This guide walks through two closely related tasks:
Manual journal entries — posting adjusting, accrual, or correcting entries with balanced lines
Period close — locking a period after all entries are in so no accidental postings slip through
Most GL entries are posted automatically by Arcus when business events occur (order fulfillment, payments, receipts). Manual JEs are for adjusting entries, accruals, depreciation, and corrections that do not originate from a transaction.
Every journal entry must balance: the sum of all debit amounts must equal the sum of all credit amounts. An off-by-one-cent imbalance is a validation failure.
Rule: SUM(debit) == SUM(credit)
If the amounts do not balance, the API returns 422 with code: gl_imbalance and includes the exact difference:
You cannot post to header (rollup) accounts like “1000 Cash and Bank Accounts” or “1400 Inventory.” You must post to a leaf account like “1011 Operating Checking” or “1410 Finished Goods Inventory.”Use GET /v1/gl-accounts?postable_only=true to get the list of valid accounts for your entity.
{ "error": "account_is_header", "code": "account_is_header", "type": "validation_error", "hint": "GL account 1000 is a header account and cannot be posted to directly.", "param": "lines[0].account_id"}
If your entity has approval thresholds configured, journal entries above the low threshold land in pending_approval status. GL does not post until the entry is approved.Check the status:
The reversal is a new JE with all debits and credits swapped. The original entry is unchanged and both remain visible in the account ledger. The response includes is_reversing: true and reversal_of_id pointing to the original.
Owners and admins can close immediately without a second approver:
curl -s -X POST "https://api.arcuserp.com/v1/periods/$PERIOD_ID/close" \ -H "Authorization: Bearer $ARCUS_API_KEY"
The period transitions to closed status. Any attempt to create a journal entry with an entry_date inside a closed period returns:
{ "error": "period_closed", "code": "period_closed", "type": "validation_error", "hint": "Accounting period May 2026 is closed. Use a date in an open period or reopen this period."}
If you need to post a correcting entry after close:
curl -s -X POST "https://api.arcuserp.com/v1/periods/$PERIOD_ID/reopen" \ -H "Authorization: Bearer $ARCUS_API_KEY"
The period returns to open status. Reopen + correcting entry + re-close is the standard GAAP path for post-close adjustments. All changes are audit-logged.
At fiscal year-end, income statement accounts (revenue, COGS, expenses) are zeroed out and their net balance rolls into retained earnings. Create these as standard manual JEs:
Repeat for COGS and expense accounts (the net becomes your net income for the year). After posting all closing entries, the income statement accounts should show zero balances and only balance sheet accounts should have non-zero balances.