Manual Entry¶
kasas usually mirrors a bank feed, but it is also a ledger you can author directly. You can create accounts and transactions by hand, edit them, and delete them — from the dashboard, the REST API, or the MCP server. This lets you record cash spending or a split alongside synced data, or run kasas as a fully standalone manual ledger with no SimpleFIN connection at all.
Manual vs. synced: the source column¶
Every account and transaction carries a source: simplefin for rows the bridge
owns, manual for rows you created. That one field is the whole rule:
Only manual rows are editable
A manual transaction or account can be edited and deleted. A synced one is
owned by the bridge and its core fields are read-only — editing it would be
silently overwritten on the next sync, and deleting it would just
reappear. Attempting either returns 409 Conflict. (You can still
label, extend, and
relate synced transactions — that metadata is
yours and survives re-syncs.)
A manual transaction may live in any account — including a synced one (handy
for recording a cash purchase against your real checking account). Only the
transaction's own source decides whether it is editable.
What you can do¶
| Action | REST | MCP |
|---|---|---|
| Create an account | POST /api/v1/accounts |
create_account |
| Edit / delete an account | PUT/DELETE /api/v1/accounts/{id} |
update_account / delete_account |
| Create a transaction | POST /api/v1/transactions |
create_transaction |
| Edit / delete a transaction | PUT/DELETE /api/v1/transactions/{id} |
update_transaction / delete_transaction |
A transaction needs an account_id (must exist), an amount (a signed decimal
like -12.34, stored verbatim — never rounded), and a date (YYYY-MM-DD,
RFC3339, or unix seconds); description, payee, memo, and pending are
optional. An account needs a name and currency, with an optional starting
balance. Bad input is rejected with 400, an unknown id with 404.
In the dashboard, an Add account card and an + Add transaction button open a small form; manual rows and cards reveal Edit / Delete controls on hover.
It rides the same rails as everything else¶
Manual entry is not a side door — it flows through the same transactional emitter as the sync poller, so it inherits the whole platform:
- Events — a create emits
transaction.created/account.created; an edit emitstransaction.updated; a delete emitstransaction.deleted/account.deleted. Deleting an account emits atransaction.deletedfor each of its transactions first (the database cascade is made explicit on the stream), thenaccount.deleted. Webhooks and the pluginOnTransactionCreate/OnTransactionUpdate/OnTransactionDeletehooks fire for manual rows too — a delete (including each transaction removed by an account cascade) reachesOnTransactionDeletewith the row's last-known snapshot. - History — a manual transaction gets a v1
importedsnapshot; each edit adds aneditedversion with a field-level diff. See Transaction History. - Provenance — its lineage reads "imported from manual", then the ordered edits. See Transaction Provenance.
Limitations¶
- Account balances are static. A manual account's balance is a value you maintain; kasas does not recompute it from the account's transactions. (A derived running-balance is a possible future addition.)