Skip to main content

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

StatusDescription
QUEUEDWaiting for an accountant to pick up
IN_REVIEWAssigned to an accountant
APPROVEDAccountant verified and approved the entry
REJECTEDAccountant rejected the entry
CHANGES_REQUESTEDAccountant 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 = true exists, a review is auto-created via a background job
  • BackfillPOST /accounting/connections/{id}/backfill-reviews queues all existing entries that don't have a review yet
  • ManualPOST /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 QUEUED when 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 BASIS document
  • At least one approved PAYMENT_PROOF document
  • At least one payment transaction

Invalidation

If an entry is modified while a review is in QUEUED or IN_REVIEW status:

  1. The review is reset to QUEUED
  2. The reviewer assignment is cleared
  3. A REVIEW_INVALIDATED event 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 TypeTrigger
REVIEW_QUEUEDReview created
REVIEW_ASSIGNEDReviewer assigned
REVIEW_APPROVEDReview approved
REVIEW_REJECTEDReview rejected
REVIEW_CHANGES_REQUESTEDChanges requested
REVIEW_INVALIDATEDEntry modified during review