Upsert Opening Balance Draft
PUT/api/ledger/opening-balance
The opening balance is an INTERNAL journal entry seeding each GL account's position as of the tenant's books-start date — it is NEVER synced to the accounting provider (non-bypassable internal_only eligibility), which already holds these balances. The inventory line is derived from the valuation at end of day prior to the Inventory Start Date and snapshotted at apply time. Spec: docs/plans/ledger-opening-balance-entry.md.
Any valid API token can call this endpoint — no specific scope required. Manage tokens.
Authentication: Requires Bearer token + accounting.manage_settings.
Request body: as_of_date (Y-m-d, must equal the Inventory Start Date at apply time), optional equity_nominal_code_id (balancing account), optional notes, and lines[] of {nominal_code_id, direction: debit|credit, amount > 0} — accounts must be unique; the inventory account is system-managed and may not appear. 422 once the document is applied (delete and recreate, or rebuild).
Request
Responses
- 200
- 401
- 403
- 422
- 429
OK
Response Headers
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Validation failed — the body is a field → messages map (Laravel shape) or the platform envelope with a stable machine-readable code. Fix the payload and resubmit.
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.