Log one expense: amount, currency, category, merchant, date, project, note, receipt path, billable flag, VAT rate. An empty category is filled in from the merchant rules. `billable` defaults to **true when a `project` is given** and false otherwise, and the response always states which value was us…
Read or set the defaults `expense_add` uses when a call names none: `default_vat_rate`, `default_currency
List expenses in a date range, filtered by project, category or billable, with totals per currency
Change any field of a stored expense by id. `rebilled: false` clears both the rebilled marker and the invoice number. Amount, currency and `vat_rate` are refused on an expense already rebilled unless you pass `unlink_rebill: true`, which clears the rebill link, because the invoice charged something…
Delete one expense by id. The receipt file itself is left alone
Attach a receipt file to an expense. The file must exist; its path and sha256 are stored
Set or list the merchant-to-category rules. A match with no regex metacharacters is a plain substring; one with them is compiled only if it cannot backtrack exponentially, and a pattern like `(a+)+` is refused
Totals for a range grouped by category, project, month or merchant, with the gross, net and VAT per currency
Log a trip in km or miles and price it from the rate table (or your own rate)
Write the range to csv, xlsx or json and return the path. Never writes a partial file
Preview a project's unbilled billable expenses as `invoice_create` line items, per currency, with an optional markup and an optional `assume_vat_rate`. Pass `target_currency` + `fx_rates` to fold every currency into one group. When nothing matches it returns `count: 0`, no `fx_note`, and the plain…
Mark expenses rebilled once the invoice exists, by ids or by project, date range and `currency`. `invoice_number` is required
+2 more tools listed on main page