Accounting Administration
Build tax, opening-balance, and books-closing workflows
Mental Model
Administrative accounting writes configure tax, establish opening positions, or move the first open accounting date. Their consequences span more data than a normal row edit.
Resources and Lifecycle
Tax rates remain renderable on historical fees and transactions after they
become inactive. Opening balances are separate resources, one per accounting
purpose. booksClosedAt is the first open date; earlier affected journal
dates are closed.
Explicit opening balances carry the position immediately before the first live
GL date and remain active even though their journal date precedes
statementStartAt. Setting or reapplying statementStartAt reclassifies other
unlocked journals around that boundary. It preserves active opening balances
and restores any that were made inactive solely by the previous GL boundary.
The first owner statement then includes those listing positions in Balance
start.
Read Model
Render current tax-rate status and usage, dedicated opening-balance responses,
team booksClosedAt, operation issues, and affected-resource results. Each
opening-balance type has its own operation and schema; use them as-is.
Decision Table
Tax and Opening Balances
| Workflow | Client rule |
|---|---|
| Tax-rate removal | Archive only when returned contract supports it |
| Opening trial balance | Use dedicated account and balancing contract |
| A/P, A/R, deferred, deposits, tax | Use each dedicated operation |
| Listing or bank initialization | Keep its own identity and posting rules |
| Close books | Set boundary; explain first-open-date semantics; confirm |
| Reopen all dates | Send booksClosedAt=null through normal operation |
x-ignore-books-closed-at header | Never expose as a normal product control |
Editability
Tax usage and historical journals can prevent deletion. Opening balances and
books closing must respect statement attachments and other locks even when the
x-ignore-books-closed-at header is available for controlled repair workflows.
Books Closing
A business entity can have several journal dates. Compare the affected posting date, not just its top-level transaction or reservation date.
After a successful books-closing update, the new boundary applies immediately to subsequent writes and previews. Clients do not need to refresh their auth session before validating affected resources.
Preview and Preflight
Tax-rate and opening-balance mutations expose dry run where the generated
OpenAPI declares the dryRun parameter. The books-closing update
intentionally has neither generic dry run nor a dedicated preview. Explain
the boundary and require confirmation, then apply and handle the normal
response.
Mutation Recipe
- Load current configuration and affected operation response.
- Pick the administrative workflow built for the change.
- Validate its exact generated schema and balancing requirements.
- Dry-run when the operation declares support.
- Explain broad journal or lock consequences.
- Confirm and apply.
- Re-read the team and affected resources.
- Surface any resulting issues or queued recalculation state.
Failure and Recovery
For locked historical input, show the statement or books boundary and keep the
original payload. Do not recommend the x-ignore-books-closed-at header. For
an unbalanced import, repair the opening workflow itself rather than posting
an unrelated transaction to hide the difference.
Common Recipes
Close a month
Select the first date that should remain open, explain that every earlier affected posting date closes, confirm without dry run, apply, and re-read the team setting.
PUT /team/books-closing
Content-Type: application/json
{
"booksClosedAt": "2026-07-01"
}Import an opening trial balance
Load the current trial-balance response, map accounts, validate balance, dry-run the complete import, then apply through the dedicated operation.
PUT /general-ledger/opening-trial-balance?dryRun=true
Content-Type: application/json
{
"rows": [
{
"accountId": "22222222-2222-4222-8222-222222222222",
"combinedCentTotal": 250000
},
{
"accountId": "33333333-3333-4333-8333-333333333333",
"combinedCentTotal": -40000
}
]
}API Reference
- List tax rates — GET /tax-rates
- Create a tax rate — POST /tax-rates
- Update a tax rate —
PUT /tax-rates/{id} - Delete a tax rate —
DELETE /tax-rates/{id} GET /general-ledger/opening-trial-balance— Read the opening trial balancePUT /general-ledger/opening-trial-balance— Replace it- Update books closing — PUT /team/books-closing
