Expensicat
CLI

Entries

Track expenses and income entries

Entries are manual financial records — expenses, income, receipts — that aren't tied to a bank transaction.

entry list

List entries.

expensicat entry list
expensicat entry list --type expense --status pending
FlagDescription
--type <string>expense or income
--status <string>Entry status
--cursor <string>Pagination cursor
--limit <number>Page size

entry show

Get an entry by ID.

expensicat entry show ent_abc123
ArgDescription
<id>Entry ID

entry create

Create an entry. Interactive when fields are missing, or pipe JSONL via --batch - for bulk creates.

expensicat entry create --date 2026-04-15 --amount 129.00 --type expense --description "AWS bill"
cat entries.jsonl | expensicat entry create --batch - --concurrency 5
FlagDescription
--date <string>Date (YYYY-MM-DD, required)
--amount <number>Amount (required)
--description <string>Description
--currency <string>Currency code; defaults to EUR
--type <string>expense or income; defaults to expense
--batch <path|->Read items from a file or stdin — see Batch input

entry update

Update an entry.

expensicat entry update ent_abc123 --amount 149.99 --category-id cat_software
ArgDescription
<id>Entry ID
FlagDescription
--description <string>New description
--amount <number>New amount
--category-id <string>Assign a category

entry delete

Delete an entry. Prompts for confirmation in a terminal; pass --yes to skip.

expensicat entry delete ent_abc123
expensicat entry rm ent_abc123 --yes   # alias + skip prompt
ArgDescription
<id>Entry ID
FlagDescription
-y, --yesSkip the confirmation prompt (required for non-interactive use)

entry upload

Upload a receipt (or a whole folder of receipts) and create entries from them. The CLI uploads each file to the team's vault, creates a receipt document, and then creates an entry linked to the document — OCR runs server-side and auto-fills amount, currency, date, vendor, and category.

# One receipt
expensicat entry upload ./receipt.pdf --type debit

# Whole folder, 3 uploads in parallel
expensicat entry upload ~/receipts-q1 --concurrency 3

# Recursive + glob filter, emit JSONL for piping
expensicat entry upload ~/receipts --recursive --pattern '*.pdf' --json
ArgDescription
<path>Path to a receipt file or a folder of receipts
FlagDescription
--type <type>debit (expense, default) or credit (income)
--concurrency <n>Parallel uploads, 1–10 (default 3)
--recursiveWalk subdirectories when the target is a folder
--pattern <glob>Filter files by filename glob (e.g. '*.pdf'). Default *
--fail-fastStop at the first failure instead of collecting all errors
--jsonEmit one JSONL result per file (for pipelines)

Under the hood: each file is PUT to vault → POST /api/v1/documents (category receipt) → POST /api/v1/entries with the primary_document_id. OCR fires automatically on the entry endpoint when no amount is provided.

Skipped automatically when walking a folder: hidden files, symlinks, zero-byte files, and node_modules/.git under --recursive.

Exit codes match document upload0 / 9 / 1 / 2.

On this page