The close, as an API

Reconciliations, accruals, entries, flux and the trial balance, per call, across every set of books you keep.

POST/v1/workers/close3 entities · 5 workers
Requestapplication/json
{  "period": "2026-09",  "entities": [    "ent_0141",    "ent_0142",    "ent_0143"  ],  "flux_threshold": {    "pct": 10,    "amount": "5000.00"  },  "approvers": ["role:senior_accountant"],  "stream": true}
Eventstext/event-stream
  1. 09:14:21trial_balance.tiedent_0141AR and AP tie; cash has 3 open items
  2. 09:14:18entry.postedent_0142je_0907 · approved by M. Okafor
  3. 09:14:12flux.flaggedent_0143Payroll +18.4% vs August · 2 entries cited
  4. 09:14:09entry.awaiting_approvalent_0142je_0912 · Utilities accrual · 1,240.00
  5. 09:14:06accrual.proposedent_0142Utilities · three-month average · 1,240.00
  6. 09:14:04reconciliation.openent_01413 bank lines unmatched · 418.20
  7. 09:14:02reconciliation.matchedent_0141Operating account · 212 of 215 lines
  8. 09:14:01close.startedent_0143Period 2026-09 · 5 workers queued
  9. 09:14:01close.startedent_0142Period 2026-09 · 5 workers queued
  10. 09:14:00close.startedent_0141Period 2026-09 · 5 workers queued

Built for the people who keep other people's books

  • Accounting firms
  • Fund administrators
  • Bookkeeping platforms
  • Vertical SaaS

The close is not reserved. The opinion is. Workers reconcile and tie out; opinions and signatures stay with the people the law names.

Fig 0.1

One call, every entity

Run the close for every entity in one request.

Fig 0.2

Matched line by line

Bank lines meet ledger lines; what doesn't match comes back open.

Fig 0.3

Variances, explained

Flux past your threshold comes back with the entries that moved it.

Six workers, one key

One call per job, each returning typed JSON you can check.

  • POST/v1/workers/close

    Close orchestrator

    Runs the other five in order, per entity, and reports what's still open.

    returns close_summary · event[]

  • POST/v1/workers/reconciliations

    Reconciliations

    Bank and card feeds against the ledger. Open items come back named.

    returns match[] · open_item[]

  • POST/v1/workers/accruals

    Accruals

    Costs incurred but not yet billed, with the basis attached.

    returns entry[]

  • POST/v1/workers/entries

    Journal entries

    Recurring and adjusting entries, drafted and held for approval.

    returns entry[]

  • POST/v1/workers/flux

    Flux

    Movement past your threshold, with the entries behind it.

    returns variance[] · cited_entries[]

  • POST/v1/workers/trial-balance

    Trial balance

    Ties subledgers and bank to the general ledger and names any break.

    returns tie_out[] · break[]

Nothing posts unapproved

Approval takes a person's own token, so the server key can never post an entry.

GET/v1/entries/je_0912
{  "object": "entry",  "id": "je_0912",  "entity": "ent_0142",  "period": "2026-09",  "status": "proposed",  "proposed_by": "accruals",  "memo": "Utilities accrual",  "lines": [    {"account":"6100","debit":"1240.00"},    {"account":"2100","credit":"1240.00"}  ],  "basis": "Three-month average",  "approval": {    "required": true,    "approver": "role:senior_accountant"  }}
POST/v1/entries/je_0912/approveuser token
{  "object": "entry",  "id": "je_0912",  "status": "posted",  "approved_by": {    "id": "usr_7f2a",    "name": "M. Okafor"  },  "posted_at": "2026-10-02T14:12:09Z"}
POST/v1/entries/je_0912/return
{  "object": "entry",  "id": "je_0912",  "status": "returned",  "reason": "Book the invoice: 1312.40"}

What stays reserved

Ask for a reserved act and the call returns BLOCKED, naming who can do it.

ActReturnsReserved to
An audit, review or examination opinionBLOCKEDRESERVED_ACTA licensed firm independent of the entity
An opinion on internal controlBLOCKEDRESERVED_ACTA licensed firm independent of the entity
Signing a tax return as preparerBLOCKEDRESERVED_ACTA paid preparer with a PTIN
Representing the entity before a taxing authorityBLOCKEDRESERVED_ACTA CPA, an enrolled agent or an attorney
Investment adviceBLOCKEDRESERVED_ACTA registered investment adviser

One key, every door

Request it once; every call prices from one rate card.

No record, no charge

A refusal, a retry or an unavailable upstream meters nothing.

Start with one entity

Tell us whose books you keep and which workers you need first.