Accounting Review
An Accounting Review represents the accountant's evaluation of a financial entry before it is synced to an external accounting system (or finalized in manual mode).
Review Statuses
| Status | Description |
|---|---|
QUEUED | Waiting for an accountant to pick up |
IN_REVIEW | Assigned to an accountant |
APPROVED | Accountant verified and approved the entry |
REJECTED | Accountant rejected the entry |
CHANGES_REQUESTED | Accountant requested modifications before approval |
Review Lifecycle
1. Entry enters queue
Entries are automatically added to the review queue when:
- Created via API or SDK — if a connection with
requireReview = trueexists, a review is auto-created via a background job - Backfill —
POST /accounting/connections/{id}/backfill-reviewsqueues all existing entries that don't have a review yet - Manual —
POST /accounting/reviews { entryId, connectionId }creates a review directly
If no AccountingConnection exists for the workspace, no reviews will be created. The connection must be set up first.
2. Accountant takes review
The accountant self-assigns by calling PATCH /accounting/reviews/{id}/assign. The status moves to IN_REVIEW.
3. Accountant decides
- Approve: Optionally assigns a chart of accounts category. If the connection has
syncMode: AUTO_PUSH, the entry is automatically pushed to the external system. - Reject: Provides a reason. The entry status may be updated to
REJECTED. - Request Changes: Sends back for corrections. The review returns to
QUEUEDwhen changes are made.
Document Verification
If requireCompletenessForSync = true on the connection, the accountant cannot approve a review until the entry is complete:
- At least one approved
BASISdocument - At least one approved
PAYMENT_PROOFdocument - At least one payment transaction
Invalidation
If an entry is modified while a review is in QUEUED or IN_REVIEW status:
- The review is reset to
QUEUED - The reviewer assignment is cleared
- A
REVIEW_INVALIDATEDevent is recorded
This ensures the accountant always reviews the latest version of the entry.
Batch Operations
Multiple reviews can be approved or rejected in a single API call:
POST /accounting/reviews/batch/approve
{ "reviewIds": ["uuid1", "uuid2"], "categoryId": "cat-uuid" }
Audit Trail
All review actions generate EntryEvent records:
| Event Type | Trigger |
|---|---|
REVIEW_QUEUED | Review created |
REVIEW_ASSIGNED | Reviewer assigned |
REVIEW_APPROVED | Review approved |
REVIEW_REJECTED | Review rejected |
REVIEW_CHANGES_REQUESTED | Changes requested |
REVIEW_INVALIDATED | Entry modified during review |
Related Pages
- Completeness — completeness rules enforced before approval
- Accounting Integration — sync lifecycle after review approval
- Accountant Workflow — step-by-step guide for accountants
- Accounting API — REST endpoints for reviews, connections, and sync