entrytwo - full capability index
Everything under the hood. Explained for everyone.
Whether you run the business or run the server: this page covers what entrytwo does in plain language and goes deep enough that developers, accountants, and auditors can see it is not another CRUD ledger with a chatbot bolted on.
AI that actually commits. Not just suggests.
Most AI accounting tools only suggest entries. entrytwo's AI behaves like a very good junior accountant. When it is confident and you have allowed it, it posts the entry for real. Finished, balanced, and fully documented.
High-confidence autonomous posting
When validation passes and you've unlocked it, the AI books entries directly. Real, auditable posts. Not drafts you have to click through.
- Direct tool call to createAutonomousJournal
- Chat lock gates all autonomous execution
Every entry explains itself
Each automatic entry records which model made it, how confident it was, its reasoning, and the source documents it used.
- Tagged AI_AUTONOMOUS_ENTRY
- Model + confidence + reasoning + sources stored
Safety rails you control
Anything uncertain, destructive, or touching master data always becomes a proposal for your review. The AI never gets to guess with your books.
- Low-confidence → proposal only
- Master-data & destructive actions always reviewed
Reads your documents
Drop in a PDF invoice or statement and the AI extracts, books, and links it. Receipts stay attached to the entry forever.
- PDF upload via provider Files API
- Private, authorized attachment storage
Persistent chat with memory
Conversations are saved per user with bounded context, so you can pick up where you left off without re-explaining your books.
- User-owned chat threads
- Idempotent message handling
You bring your own AI model
You connect the AI model. All major providers are supported (OpenAI, Anthropic, xAI/Grok, etc.). You can also use your own local or self-hosted models through any OpenAI-compatible API.
- OpenAI, Anthropic, xAI/Grok and more
- Local models via compatible endpoints
- You provide the API key
The Git model, in practice.
This is not a metaphor. It is the enforced data model. Every change to your books is an immutable commit with full provenance. History is never rewritten. Rollbacks and AI actions create new, visible commits.
| capability | what it means for you | how it's built |
|---|---|---|
| Point-in-time history | See exactly what your books looked like on any date. Provable, not reconstructed. | Ancestry walking via getVisibleJournalEntryIds |
| Branching | Let the AI work on a messy month without touching the official books. | AccountingBranch + parentEventId |
| Merge | Accept AI or experimental work into your real books safely, in one step. | mergeBranch replays only new entries into target ancestry |
| Diff | See the exact net change between any two states of your books. | diffPoints at account or full-books level |
| Blame | Know who (or which AI) touched an account, and why. | blameAccount with full provenance per line |
| Restore / rollback | Time travel that never destroys anything. Undo is a new, visible entry. | restore.ts creates an auditable ROLLBACK commit |
| Reconciliation | The AI proposes clearing entries for unmatched transactions at high confidence. | reconcile.ts + autonomous clearing entries |
| Audit events | A complete, tamper-evident record of everything that ever happened. | Typed Event model on every mutation |
Why it matters: auditors and owners get real, explainable, point-in-time truth instead of "the database says so." Tag official states (month-end close, auditor snapshot, tax filing) and reproduce them exactly, forever.
The boring stuff, done right.
AI-native double-entry accounting. The AI posts real journal entries when confident. A rigorous engine ensures every mutation is atomic, validated, and balanced. Closed periods stay closed.
Atomic, idempotent posting
One single source of truth handles every journal mutation: debits must equal credits, periods must be open, and retries can never double-book.
- commitJournalAtomic — validation, ancestry & event in one transaction
- Advisory locks per branch · idempotency keys
Real accounting periods
Open, close, and reopen periods with audit notes. Closed-period enforcement runs on every single commit. Nothing sneaks into a filed month.
- AccountingPeriod OPEN/CLOSED
- assertAccountingPeriodOpen on every commit
Multi-currency done properly
Foreign-currency amounts always carry a sourced exchange rate. The AI can never invent an official rate. Provisional and authoritative sources are kept distinct.
- Provisional vs authoritative FX sources
- BANK_FEED / statement provenance on rates
Recurring & automated entries
Recurring journals and invoices generate on schedule. Through the same safe, autonomous posting path as everything else.
- generateRecurringJournalOccurrence
- Same atomic commit path as manual entries
Expense claims with a real workflow
Draft, submit, approve, reject, or request changes. Multi-line claims with receipts, tax, foreign currency, and reimbursement tracking.
- Full lifecycle with approvals & activities
- Posts to ledger only when approved and balanced
Credit notes & cancellations
Corrections are proper reversing entries linked to the original. Nothing is ever silently edited or deleted.
- Reversing journals via the atomic path
- Invoice.reversedJournalEntryId linkage
Security your auditor will approve of.
Self-hosted does not mean self-exposed. entrytwo ships with production-grade authentication, hardening, and encryption out of the box. It holds your most sensitive business data.
Modern sign-in, no passwords to leak
Email magic links and OAuth (Google, Microsoft) with strict allow-listing. New users join by invitation only; the sign-in email must match the invite.
- Single-use, expiring invitation tokens
- Google + Microsoft OAuth · invite email must match
Real two-factor authentication
Standards-based TOTP with encrypted secrets and one-time recovery codes. Mandatory for admins in production.
- RFC 6238 TOTP · encrypted secrets
- Hashed recovery codes · re-auth to disable
Roles & instant lockout
Admin, accountant, and viewer roles are enforced on every route. Disable a user and their sessions die immediately.
- RBAC on every route
- sessionVersion revocation on disable
Hardened by default
Rate limiting on sensitive endpoints, a strict content security policy, and private files that are only served to authorized users.
- DB-backed rate limiting
- CSP with per-request nonces + strict-dynamic
- canAccessFileAsset authorization
Encryption where it counts
Bank credentials and secrets are encrypted at rest, with a documented, safe key-rotation procedure.
- AES-256-GCM via ENCRYPTION_KEY
- Documented key rotation
Logs that never betray you
Structured logging automatically redacts secrets and personal data, with correlation IDs on every request for clean debugging.
- Automatic secret/PII redaction
- x-request-id on every request/response/error
Built to run for years, not demos.
Backups that provably restore, background jobs that survive crashes, and updates that roll themselves back on failure. This is what production-grade self-hosting looks like.
Backups that actually restore
One complete, portable, encrypted backup: every table and every receipt file, with cryptographic integrity checks. Full round-trip restore is proven, including files and history pointers.
- SHA-256 per file + manifest
- Encryption key fingerprint check on restore
Durable background jobs
Webhooks and long-running work go through a database-backed queue with retries, so a crash or restart never loses your data.
- Idempotency keys · leasing · stale-lock recovery
- Exponential backoff · dead-letter state · attempt history
Self-updates with a safety net
Trigger updates from the admin UI. entrytwo backs itself up first, health-checks after restart, and rolls back automatically if anything fails.
- Digest-pinned images · pre-update backup
- Post-restart health gate · automatic rollback
Observability built in
A single health endpoint reports database, storage, job queue, and configuration status. So you always know your instance is healthy.
- /api/health with queue + secrets checks
- Structured logs with correlation IDs everywhere
Connected to how you actually get paid.
Payments, bank feeds, email, and professional PDF invoicing. Everything is integrated properly, with replay-safe webhooks and full provenance on every imported transaction.
Stripe & PayPal
Send invoice payment links and track their status automatically. Incoming events are verified, deduplicated, and processed reliably.
- Signature-verified webhooks
- Idempotent upserts · async durable processing
- Admin-visible retry UI
Stripe & PayPal feeds
Connect your Stripe or PayPal account for live transaction feeds. For other banks and credit cards, just upload statements, PDFs or CSVs. The AI reads them and creates the journal entries for you.
- Live Stripe and PayPal feeds
- Upload statements or files for everything else
Professional invoices
PDF invoices with your logo, IBAN QR codes for instant bank payment, and multi-language support. Delivered by email.
- SMTP delivery
- IBAN QR + multi-language layouts
Reports that time-travel
Balance sheet, profit & loss, and cash flow. All point-in-time aware. Run any report exactly as your books stood on any date.
- Git-aware, point-in-time reporting
- CSV export for your accountant
Reconciliation reports
See what is matched and what is not. Let the AI propose clearing entries for the leftovers at high confidence.
- Autonomous clearing option
- Full audit trail on every match
Complete audit log
Every action (human or AI) lands in a rich, tamper-evident event log your auditor can actually work with.
- Typed Event model with rich payloads
- Tamper-evident history
Convinced? Try it free for 30 days.
No card required for the trial. When you are ready, buy a one-time license. Security and maintenance updates included forever.