Post journals to QuickBooks — with a human approval gate

Reconciliation no longer stops at a proposal. Once a payout is reconciled, your AI assistant can ask for it to be posted to QuickBooks Online as a journal entry — but nothing is ever written to your ledger without an explicit human approval. Two tools drive the flow: post_journal and approve.

Step 1 — Map your ledger accounts (one-time setup)

Journals are drafted against four abstract roles. Before the first posting, bind each role to a real account from your QuickBooks chart of accounts at mcp.g-integrator.com/connect/accounts (also linked from the Vendor connections page):

RoleTypical QuickBooks account
BANKThe bank account receiving the deposit
PAYMENT_CLEARINGPayment clearing (charges credit it; refunds and deposits relieve it)
PROCESSOR_FEESProcessor fee expense (Stripe / Shopify Payments fees)
SUSPENSEHolding account for unmatched or unexplained amounts awaiting review

Step 2 — Request posting with post_journal

After a successful reconcile_payout, ask your assistant to post it — e.g. “Post the journal for Stripe payout po_123…” → post_journal(vendor=STRIPE, payoutId=po_123…). This:

  • Freezes the exact journal snapshot from the reconciliation — what the approver sees is exactly what gets posted; later re-reconciles never change a pending approval.
  • Opens an approval request and emails a one-time decision link to every user with the APPROVER or ADMIN role.
  • Returns the approval id and status (pending_approval) to the assistant.

Step 3 — Approve or reject

Approvers can decide through either path:

  • Email link: the link opens a review page showing the full journal (roles, debit/credit sides, amounts, memos) with Approve and post / Reject buttons. Each link is single-use and expires after 7 days — once used, it's dead, and a rejected or posted approval can't be replayed.
  • The approve tool: from an AI client signed in as an APPROVER or ADMIN user — approve(approvalId=…, decision=APPROVE) (or REJECT, with an optional note). Users without the role get a typed forbidden error.

On approval the journal entry is posted to QuickBooks exactly as snapshotted, and the tool/page returns the new QuickBooks journal-entry id. The posting step is guarded against double-posting: retries, concurrent approvals and repeated clicks all resolve to a single ledger entry.

Good to know

  • Nothing posts without a human. post_journal only opens the request; a decision is always required.
  • Rejected? Running post_journal again for the same payout reopens the request with fresh links.
  • Transient QuickBooks failure? The approval lands in POST_FAILED with a typed error; approving again (tool or link) retries safely.
  • All outcomes are typed — e.g. not_reconciled (reconcile first), account_mapping_missing (finish Step 1), no_approvers (no user holds the role), posted (already done, returns the entry id).