CLI Tool
The Hisaabo CLI (hisaabo) brings your entire business management workflow to the terminal. Built with Ink 5 (React for the terminal) and Commander.js, it renders rich interactive tables, colored status badges, and INR-formatted numbers directly in your shell.
It is useful for three things: quick lookups without opening a browser, automation scripts and cron jobs, and AI agent workflows that execute shell commands as part of a broader pipeline.
By default, commands render a pretty table with color. Pass --json to get clean JSON output for piping into jq or other tools.
Installation
Section titled “Installation”npm install -g @hisaabo/cliOr use without installing:
npx @hisaabo/cli <command>Verify the installation:
hisaabo --versionAuthentication
Section titled “Authentication”Sign in with your browser (interactive)
Section titled “Sign in with your browser (interactive)”hisaabo login --api-url https://your-hisaabo-instance.comYour browser opens so you can sign in to the Hisaabo web app (magic link). The CLI listens on a temporary 127.0.0.1 port, receives a one-time code there, and exchanges it using PKCE, so no password or long-lived secret is typed into the terminal. If the browser does not open (for example over SSH), copy the printed URL into a browser on any machine that can reach the web app; the sign-in must complete on the same machine unless the callback port is forwarded.
If you have more than one business you are asked to pick one; change it later with hisaabo switch.
| Option | Description |
|---|---|
--api-url <url> |
Server URL (env: HISAABO_API_URL). Prompted for if omitted |
--web-url <url> |
Web app URL used for browser sign-in (env: HISAABO_WEB_URL). Needed on self-hosted servers whose web app is not at the default hosted address |
--token-stdin |
Read an API key from stdin instead of using the browser (requires --api-url) |
There is no email/password prompt. The CLI sends X-Hisaabo-Client: cli and receives a session token that is stored in the config file.
Sign in with an API key (scripts and CI)
Section titled “Sign in with an API key (scripts and CI)”Create an API key in the Hisaabo web app under Settings → API Keys (admins only, paid plans), or with hisaabo api-key create once you are signed in, then pipe it in:
echo "hisaabo_key_xxxxxxxxxxxxxxxxxx" | hisaabo login --api-url https://your-instance.com --token-stdinThe CLI validates the key, resolves your user and business, and stores it in the config file. Avoid the deprecated --token <key> flag: the key would be visible in the process list and your shell history.
API keys expire (default 90 days, maximum 365 days; set it with hisaabo api-key create --expires-in-days) and are revoked when the member is removed or their role changes.
Environment variables (recommended for automation)
Section titled “Environment variables (recommended for automation)”For cron jobs and CI/CD pipelines, set credentials as environment variables instead of logging in. Nothing is written to disk:
export HISAABO_API_URL=https://your-hisaabo-instance.comexport HISAABO_TOKEN=hisaabo_key_xxxxxxxxxxxxxxxxxxexport HISAABO_TENANT_ID=your-tenant-uuidexport HISAABO_BUSINESS_ID=your-business-uuidHISAABO_TOKEN is used only when HISAABO_API_URL is also set.
Transport security
Section titled “Transport security”The API URL must use https://. Plain http:// is accepted only for loopback hosts (localhost, 127.0.0.0/8, ::1); for anything else the CLI refuses to send credentials unless you set HISAABO_ALLOW_INSECURE=1. URLs that contain user:password@ are rejected.
Listing and switching businesses
Section titled “Listing and switching businesses”# List all businesses on your accounthisaabo business list
# Switch the active business (interactive picker)hisaabo switchSet the next document number with business sequence (it can only move forward):
hisaabo business sequence --type invoice --next-number 101--type is one of invoice, payment, quotation, credit_note, delivery_challan, proforma.
Switching updates the stored businessId in the config file. All subsequent commands operate on the newly selected business. Create new businesses in the web or mobile app.
Web app: Tap the business name in the sidebar to open a popover that lists all your businesses and includes a “Create New Business” option. Selecting a business reloads all data for that context.
Mobile app: Tap the business name on the home dashboard to open a bottom sheet with the same business list and create option.
Profile and sign-out
Section titled “Profile and sign-out”There is no CLI command to register an account; accounts are created in the web app (or by accepting an invitation).
# Update your display namehisaabo profile update-name "New Name"
# Sign out of this devicehisaabo logout
# Sign out of all devices (useful after a credential change)hisaabo logout --allCommand Reference
Section titled “Command Reference”hisaabo dashboard
Section titled “hisaabo dashboard”Display key business metrics.
hisaabo dashboardhisaabo dashboard --period todayhisaabo dashboard --period this-weekhisaabo dashboard --period this-monthhisaabo dashboard --period last-monthhisaabo dashboard --period this-yearhisaabo dashboard --from 2026-01-01 --to 2026-03-31| Flag | Description |
|---|---|
--period |
today, this-week, this-month, last-month, this-year |
--from / --to |
Custom date range (ISO 8601) |
--json |
Raw JSON output |
Example output:
Business Dashboard — March 2026━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━Revenue: ₹4,82,500Expenses: ₹1,23,400Net Profit: ₹3,59,100Outstanding: ₹78,250 (6 overdue invoices)
Top customers this month: Gupta Enterprises ₹1,42,000 Sharma Traders ₹98,500 Vinod & Sons ₹67,000
Low stock alerts: 3 itemshisaabo invoice
Section titled “hisaabo invoice”hisaabo invoice list
Section titled “hisaabo invoice list”hisaabo invoice listhisaabo invoice list --status overduehisaabo invoice list --status paidhisaabo invoice list --party "Sharma Traders"hisaabo invoice list --from 2026-03-01 --to 2026-03-31hisaabo invoice list --status overdue --sort oldest-firsthisaabo invoice list --type purchasehisaabo invoice list --json| Flag | Description |
|---|---|
--status |
draft, sent, paid, overdue, cancelled |
--type |
sale (default) or purchase |
--party |
Party name or ID |
--from / --to |
Date range |
--sort |
newest-first (default), oldest-first, amount-asc, amount-desc |
--limit |
Max results (default 50, max 100) |
--json |
Raw JSON output |
hisaabo invoice get
Section titled “hisaabo invoice get”hisaabo invoice get BB-12948hisaabo invoice get inv_xxxxxxxxxx --jsonhisaabo invoice create
Section titled “hisaabo invoice create”Interactive wizard when run without flags. Or pass flags for scripting:
hisaabo invoice create \ --party "Montu Arora" \ --item "Spinach" --quantity 7.3 --unit kg --price 65 \ --item "Tomato" --quantity 5 --unit kg --price 40 \ --date 2026-03-26 \ --due-date 2026-04-10For complex invoices with many line items, pass a JSON file:
hisaabo invoice create --from-file invoice.jsonWhere invoice.json follows the format:
{ "party": "Gupta Enterprises", "date": "2026-03-26", "dueDate": "2026-04-10", "items": [ { "item": "Basmati Rice 25kg", "quantity": 10, "unit": "bag", "price": "1250.00" }, { "item": "Mustard Oil 15L", "quantity": 5, "unit": "can", "price": "2100.00" } ], "notes": "Delivery to warehouse on 28th"}hisaabo invoice pdf
Section titled “hisaabo invoice pdf”# Download PDF to current directoryhisaabo invoice pdf BB-12948
# Specify output pathhisaabo invoice pdf BB-12948 --output /tmp/invoices/
# Thermal (58mm) formathisaabo invoice pdf BB-12948 --format thermalhisaabo invoice update
Section titled “hisaabo invoice update”Update fields on an existing invoice. Only draft invoices can be fully edited; sent or paid invoices accept a limited set of changes.
hisaabo invoice update BB-12948 \ --notes "Updated payment terms: 30 days net" \ --due-date 2026-04-30Pass --from-file invoice.json to replace the full invoice body from a JSON file (same format as invoice create).
hisaabo invoice delete
Section titled “hisaabo invoice delete”hisaabo invoice delete BB-12948Only draft invoices can be deleted. Sent or paid invoices must be cancelled via status update.
hisaabo party
Section titled “hisaabo party”hisaabo party list
Section titled “hisaabo party list”hisaabo party listhisaabo party list --type customerhisaabo party list --type supplierhisaabo party list --search "sharma"hisaabo party list --outstanding # only parties with unpaid balancehisaabo party list --jsonhisaabo party get
Section titled “hisaabo party get”hisaabo party get "Sharma Traders"hisaabo party get party_xxxxxxxxxx --ledgerhisaabo party get "Gupta Enterprises" --ledger --from 2026-01-01hisaabo party create
Section titled “hisaabo party create”hisaabo party create \ --name "Mehta & Sons" \ --type customer \ --phone 9876543210 \ --gstin 27AABCU9603R1ZX \ --city Mumbai \ --state Maharashtrahisaabo party ledger-report
Section titled “hisaabo party ledger-report”Full ledger report with opening balance, all transactions, and closing balance for a date range:
hisaabo party ledger-report --party "Gupta Enterprises" --from 2026-04-01 --to 2026-03-31hisaabo party ledger-report --party party_xxxxxxxxxx --jsonhisaabo party stats
Section titled “hisaabo party stats”Aggregate transaction statistics (total sales, purchases, payments) for a party:
hisaabo party stats party_xxxxxxxxxxhisaabo party stats "Sharma Traders" --jsonhisaabo party top-items
Section titled “hisaabo party top-items”Items most frequently bought from or sold to a party, ranked by quantity or value:
hisaabo party top-items party_xxxxxxxxxxhisaabo party top-items "Gupta Enterprises" --limit 10 --jsonhisaabo party merge
Section titled “hisaabo party merge”Merge two duplicate party records. All invoices, payments, and ledger entries are reassigned to the target party and the source is deleted.
hisaabo party merge --source party_xxxxxxxxxx --target party_yyyyyyyyyyhisaabo party delete
Section titled “hisaabo party delete”hisaabo party delete party_xxxxxxxxxxFails if the party has any invoices or payments on record.
hisaabo item
Section titled “hisaabo item”hisaabo item list
Section titled “hisaabo item list”hisaabo item listhisaabo item list --low-stockhisaabo item list --search "rice"hisaabo item list --category "Grains"hisaabo item list --jsonhisaabo item get
Section titled “hisaabo item get”hisaabo item get "Basmati Rice 25kg"hisaabo item get item_xxxxxxxxxx --jsonhisaabo item create
Section titled “hisaabo item create”hisaabo item create \ --name "Mustard Oil 15L" \ --unit can \ --price 2100 \ --hsn 1514 \ --gst 5 \ --category "Oils & Ghee" \ --opening-stock 20 \ --low-stock-threshold 5hisaabo item delete
Section titled “hisaabo item delete”hisaabo item delete item_xxxxxxxxxxFails if the item appears on any invoice.
hisaabo item stock
Section titled “hisaabo item stock”Adjust stock quantity:
# Add stock (positive adjustment)hisaabo item stock "Basmati Rice 25kg" --adjustment +50 --reason "Purchase from supplier"
# Remove stock (negative adjustment)hisaabo item stock "Mustard Oil 15L" --adjustment -3 --reason "Damaged in transit"hisaabo item stock-history
Section titled “hisaabo item stock-history”Full log of every stock adjustment ever made on an item:
hisaabo item stock-history "Basmati Rice 25kg"hisaabo item stock-history item_xxxxxxxxxx --from 2026-01-01 --jsonhisaabo item stock-movements
Section titled “hisaabo item stock-movements”Every stock movement including invoice deductions, purchase additions, and manual adjustments:
hisaabo item stock-movements "Mustard Oil 15L"hisaabo item stock-movements item_xxxxxxxxxx --period 6m --limit 100 --jsonhisaabo item stock-summary
Section titled “hisaabo item stock-summary”Total stock in, total out and net change over a whole period (--period 6m|1y|all), optionally in an alt unit:
hisaabo item stock-summary "Mustard Oil 15L" --period 1yhisaabo item stock-summary item_xxxxxxxxxx --unit box --jsonhisaabo item low-stock-count
Section titled “hisaabo item low-stock-count”Quick count of items currently at or below their low-stock threshold:
hisaabo item low-stock-counthisaabo item price-history
Section titled “hisaabo item price-history”Historical sale price changes for an item:
hisaabo item price-history "Basmati Rice 25kg"hisaabo item price-history item_xxxxxxxxxx --period 6m --limit 100 --jsonhisaabo item price-summary
Section titled “hisaabo item price-summary”Min, max, average and latest price over a whole period. --type sale|purchase picks the series; --unit normalises to a display unit:
hisaabo item price-summary "Basmati Rice 25kg" --period 1yhisaabo item price-summary item_xxxxxxxxxx --type purchase --jsonhisaabo item sales-stats
Section titled “hisaabo item sales-stats”Total units sold and revenue for an item over a period:
hisaabo item sales-stats "Basmati Rice 25kg" --from 2026-04-01 --to 2026-03-31hisaabo item sales-stats item_xxxxxxxxxx --jsonhisaabo item variants
Section titled “hisaabo item variants”Manage variants (size, grade, colour, etc.) for an item that has multiple options at different prices or units.
# List variantshisaabo item variants list item_xxxxxxxxxx
# Add a varianthisaabo item variants create \ --item item_xxxxxxxxxx \ --name "500g Pack" \ --price 120 \ --unit pack
# Update a varianthisaabo item variants update variant_xxxxxxxxxx --price 130
# Delete a varianthisaabo item variants delete variant_xxxxxxxxxxhisaabo item merge
Section titled “hisaabo item merge”Merge two duplicate item records. All line items and stock history are reassigned to the target and the source is deleted.
hisaabo item merge --source item_xxxxxxxxxx --target item_yyyyyyyyyyhisaabo item switch-base-unit
Section titled “hisaabo item switch-base-unit”Change the base unit of measurement for an item (e.g. kg to g). Provide the conversion factor.
hisaabo item switch-base-unit item_xxxxxxxxxx --new-unit g --factor 1000hisaabo item rename-unit
Section titled “hisaabo item rename-unit”Rename a unit on an item without changing any quantities (e.g. rename pcs to pieces):
hisaabo item rename-unit item_xxxxxxxxxx --from pcs --to pieceshisaabo payment
Section titled “hisaabo payment”hisaabo payment list
Section titled “hisaabo payment list”hisaabo payment listhisaabo payment list --party "Sharma Traders"hisaabo payment list --from 2026-03-01 --to 2026-03-31hisaabo payment list --mode upihisaabo payment list --jsonhisaabo payment create
Section titled “hisaabo payment create”# Payment received from customerhisaabo payment create \ --party "Sharma Traders" \ --amount 25000 \ --mode upi \ --date 2026-03-26 \ --reference "UTR123456789" \ --allocate BB-12800 BB-12801
# Bulk payment (no specific invoice allocation)hisaabo payment create \ --party "Gupta Enterprises" \ --amount 50000 \ --mode bank \ --reference "NEFT20260326"hisaabo payment delete
Section titled “hisaabo payment delete”hisaabo payment delete pay_xxxxxxxxxxhisaabo payment unpaid-invoices
Section titled “hisaabo payment unpaid-invoices”List invoices that still have an outstanding balance — useful before recording a payment to see what to allocate:
hisaabo payment unpaid-invoiceshisaabo payment unpaid-invoices --party "Sharma Traders" --jsonhisaabo payment untracked
Section titled “hisaabo payment untracked”Payments that were recorded but have not been linked to any invoice:
hisaabo payment untrackedhisaabo payment untracked --jsonhisaabo payment default-account
Section titled “hisaabo payment default-account”Show the bank account that is currently set as the default for incoming payments:
hisaabo payment default-accounthisaabo payment assign-account
Section titled “hisaabo payment assign-account”Assign a bank account to an existing payment record:
hisaabo payment assign-account --payment pay_xxxxxxxxxx --account account_xxxxxxxxxxhisaabo expense
Section titled “hisaabo expense”hisaabo expense list
Section titled “hisaabo expense list”hisaabo expense listhisaabo expense list --category "Transport"hisaabo expense list --from 2026-03-01 --to 2026-03-31hisaabo expense list --jsonhisaabo expense create
Section titled “hisaabo expense create”hisaabo expense create \ --amount 1500 \ --category "Transport" \ --date 2026-03-26 \ --description "Delivery to Sector 15 warehouse"hisaabo expense delete
Section titled “hisaabo expense delete”hisaabo expense delete exp_xxxxxxxxxxhisaabo gst
Section titled “hisaabo gst”hisaabo gst r1
Section titled “hisaabo gst r1”Get GSTR-1 data (outward supplies):
hisaabo gst r1 --month 3 --year 2026hisaabo gst r1 --month 3 --year 2026 --jsonhisaabo gst r1 --month 3 --year 2026 --csv --output /var/gst-reports/hisaabo gst r3b
Section titled “hisaabo gst r3b”Get GSTR-3B summary (monthly return):
hisaabo gst r3b --month 3 --year 2026hisaabo gst r3b --month 3 --year 2026 --csv --output /var/gst-reports/hisaabo automated-invoice
Section titled “hisaabo automated-invoice”Manage recurring invoice templates that auto-generate invoices on a schedule.
hisaabo automated-invoice list
Section titled “hisaabo automated-invoice list”hisaabo automated-invoice list [--status active|paused|completed|expired] [--json]Lists all recurring invoice templates with name, party, frequency, status, next run date, and run count.
hisaabo automated-invoice get
Section titled “hisaabo automated-invoice get”hisaabo automated-invoice get <template-id> [--json]Shows full template details including line items and execution history.
hisaabo automated-invoice create
Section titled “hisaabo automated-invoice create”hisaabo automated-invoice create \ --name "Monthly Rent to Gupta Ji" \ --party-id <uuid> \ --type sale \ --frequency monthly \ --start-date 2026-04-01T00:00:00Z \ --line-items '[{"description":"Office Rent","quantity":"1","unitPrice":"25000.00","taxPercent":"18"}]' \ [--end-date 2027-03-31T00:00:00Z] \ [--max-runs 12] \ [--notes "Annual rent agreement"] \ [--json]hisaabo automated-invoice pause
Section titled “hisaabo automated-invoice pause”hisaabo automated-invoice pause <template-id> [--json]Pauses an active template. No invoices will be generated until resumed.
hisaabo automated-invoice resume
Section titled “hisaabo automated-invoice resume”hisaabo automated-invoice resume <template-id> [--json]Resumes a paused template. Next run date is recalculated from now.
hisaabo automated-invoice run-now
Section titled “hisaabo automated-invoice run-now”hisaabo automated-invoice run-now <template-id> [--json]Manually trigger immediate invoice generation from a template.
hisaabo automated-invoice delete
Section titled “hisaabo automated-invoice delete”hisaabo automated-invoice delete <template-id> [-y] [--json]Permanently deletes a template and all its execution history.
hisaabo shipment
Section titled “hisaabo shipment”hisaabo shipment list
Section titled “hisaabo shipment list”hisaabo shipment listhisaabo shipment list --status in_transithisaabo shipment list --from 2026-03-01 --jsonhisaabo shipment get
Section titled “hisaabo shipment get”hisaabo shipment get ship_xxxxxxxxxxShows full tracking event history.
hisaabo shipment create
Section titled “hisaabo shipment create”hisaabo shipment create \ --invoice BB-14821 \ --mode "Delhivery" \ --tracking "DEL9876543210" \ --dispatch-date 2026-03-27hisaabo shipment update
Section titled “hisaabo shipment update”hisaabo shipment update ship_xxxxxxxxxx \ --status delivered \ --notes "Delivered to reception, signed by Ramesh"hisaabo bank
Section titled “hisaabo bank”hisaabo bank list
Section titled “hisaabo bank list”hisaabo bank listhisaabo bank list --jsonShows all bank accounts and cash accounts with current balances.
hisaabo bank get
Section titled “hisaabo bank get”hisaabo bank get account_xxxxxxxxxxhisaabo bank get "SBI Current" --transactions --from 2026-03-01hisaabo bank create
Section titled “hisaabo bank create”hisaabo bank create \ --name "HDFC Current Account" \ --type bank \ --account-number "1234567890" \ --ifsc "HDFC0001234" \ --opening-balance 50000hisaabo bank transfer
Section titled “hisaabo bank transfer”hisaabo bank transfer \ --from "SBI Current" \ --to "Petty Cash" \ --amount 5000 \ --date 2026-03-26 \ --notes "Weekly petty cash replenishment"hisaabo bank transactions
Section titled “hisaabo bank transactions”hisaabo bank transactions "HDFC Current Account"hisaabo bank transactions account_xxxxxxxxxx --from 2026-03-01 --to 2026-03-31 --jsonhisaabo bank gateway-config
Section titled “hisaabo bank gateway-config”View the gateway configuration (charge rates, settlement account) for a payment gateway account.
hisaabo bank gateway-config <accountId>hisaabo bank gateway-config <accountId> --jsonhisaabo bank update-gateway
Section titled “hisaabo bank update-gateway”Update gateway charge rates or settlement account.
hisaabo bank update-gateway <accountId> --charge-credit-card 2.5 --charge-upi 0hisaabo bank update-gateway <accountId> --settlement-account <bankAccountId>Charge values are percentages by default. Use flat:20 for a flat ₹20 charge.
hisaabo report
Section titled “hisaabo report”hisaabo report daybook
Section titled “hisaabo report daybook”All transactions for a date range, ordered by date:
hisaabo report daybook --from 2026-03-01 --to 2026-03-31hisaabo report daybook --from 2026-03-26 --to 2026-03-26 --jsonhisaabo report outstanding
Section titled “hisaabo report outstanding”Receivables and payables with aging buckets:
hisaabo report outstandinghisaabo report outstanding --type receivablehisaabo report outstanding --jsonhisaabo report tax-summary
Section titled “hisaabo report tax-summary”Taxable turnover and GST by rate for a period:
hisaabo report tax-summary --from 2026-01-01 --to 2026-03-31hisaabo report tax-summary --from 2026-04-01 --to 2026-03-31 --jsonhisaabo report item-sales
Section titled “hisaabo report item-sales”Top items by sales quantity and revenue:
hisaabo report item-sales --period this-monthhisaabo report item-sales --from 2026-04-01 --to 2026-03-31 --jsonhisaabo report stock
Section titled “hisaabo report stock”Current stock value and opening/closing comparison:
hisaabo report stockhisaabo report stock --jsonhisaabo target
Section titled “hisaabo target”hisaabo target list
Section titled “hisaabo target list”hisaabo target listhisaabo target list --period monthly --jsonhisaabo target create
Section titled “hisaabo target create”hisaabo target create \ --name "Q1 Revenue Target" \ --type order_value \ --value 500000 \ --period monthlyhisaabo target my
Section titled “hisaabo target my”Show targets assigned to you (useful for sales team members):
hisaabo target myhisaabo target my --jsonhisaabo import
Section titled “hisaabo import”hisaabo import parties
Section titled “hisaabo import parties”# From CSVhisaabo import parties parties.csv --format csv
# From JSONhisaabo import parties parties.json --format json
# From a MyBillBook exporthisaabo import parties parties.csv --source mybillbookAll import commands take the file as a positional argument and accept --source <source> to choose the adapter. The default is hisaabo (Hisaabo’s own CSV/JSON layout); use --source mybillbook for MyBillBook exports.
hisaabo import items
Section titled “hisaabo import items”hisaabo import items catalog.csv --format csvhisaabo import items catalog.jsonhisaabo export
Section titled “hisaabo export”Download a full tenant backup as a .tar.gz archive. This is a tenant-level operation — it does not require a business to be selected.
# Export by tenant slughisaabo export --tenant my-company -o backup.tar.gz
# Export by tenant UUIDhisaabo export --tenant 550e8400-e29b-41d4-a716-446655440000 -o /tmp/backup.tar.gz| Flag | Description |
|---|---|
--tenant |
Tenant slug or UUID to export (required) |
-o, --output |
Output file path (required) |
On success, prints the file size, SHA256 hash, and download time.
| Exit code | Meaning |
|---|---|
| 0 | Success |
| 1 | Not authenticated or insufficient permissions |
| 2 | Rate limit reached (max 2 exports per day) |
| 5 | Server or network error |
hisaabo restore
Section titled “hisaabo restore”Upload a .tar.gz backup archive into an empty tenant. The target tenant must have zero businesses.
# Restore by tenant slug (interactive confirmation)hisaabo restore --tenant my-company -i backup.tar.gz
# Skip confirmation prompthisaabo restore --tenant my-company -i backup.tar.gz --yes
# Restore by tenant UUIDhisaabo restore --tenant 550e8400-e29b-41d4-a716-446655440000 -i backup.tar.gz -y| Flag | Description |
|---|---|
--tenant |
Target tenant slug or UUID — must be empty (required) |
-i, --input |
Input backup file path (required) |
-y, --yes |
Skip confirmation prompt |
On success, prints rows inserted per table, skipped rows, warnings, and upload time.
| Exit code | Meaning |
|---|---|
| 0 | Success |
| 1 | Not authenticated or insufficient permissions |
| 3 | Target tenant is not empty |
| 4 | Input file missing, unreadable, or empty |
| 5 | Server or network error |
hisaabo store
Section titled “hisaabo store”hisaabo store settings
Section titled “hisaabo store settings”hisaabo store settingshisaabo store settings --jsonhisaabo store orders
Section titled “hisaabo store orders”hisaabo store ordershisaabo store orders --status pendinghisaabo store orders --from 2026-03-01 --jsonhisaabo store order confirm
Section titled “hisaabo store order confirm”Mark a pending store order as confirmed and begin fulfillment:
hisaabo store order confirm order_xxxxxxxxxxhisaabo store order cancel
Section titled “hisaabo store order cancel”Cancel a store order:
hisaabo store order cancel order_xxxxxxxxxx --reason "Out of stock"hisaabo store check-slug
Section titled “hisaabo store check-slug”Check whether a URL slug is available before updating your store URL:
hisaabo store check-slug my-store-namehisaabo store items
Section titled “hisaabo store items”List items currently shown in your online store:
hisaabo store itemshisaabo store items --jsonhisaabo store items toggle
Section titled “hisaabo store items toggle”Bulk enable or disable items in the store without editing each one individually:
# Enable multiple itemshisaabo store items toggle --enable item_aaa item_bbb item_ccc
# Disable multiple itemshisaabo store items toggle --disable item_ddd item_eeehisaabo tenant
Section titled “hisaabo tenant”Manage the tenant (organisation) that owns your businesses. Most users operate within a single tenant and never need these commands. They are most relevant to agency operators who manage multiple tenants.
hisaabo tenant list
Section titled “hisaabo tenant list”hisaabo tenant listhisaabo tenant list --jsonhisaabo tenant select
Section titled “hisaabo tenant select”Switch the active tenant. All subsequent commands operate in the context of the selected tenant.
hisaabo tenant select tenant_xxxxxxxxxxhisaabo tenant members
Section titled “hisaabo tenant members”List members of the current tenant:
hisaabo tenant membershisaabo tenant members --jsonhisaabo tenant invite
Section titled “hisaabo tenant invite”Invite a new member by email. The invitation is emailed to them; the CLI does not print an invite link.
Available roles: admin, seller_manager, seller (default), accountant.
hisaabo tenant remove
Section titled “hisaabo tenant remove”Remove a member from the tenant:
hisaabo tenant remove user_xxxxxxxxxx --yeshisaabo tenant update-role
Section titled “hisaabo tenant update-role”Update a member’s role:
hisaabo tenant update-role user_xxxxxxxxxx adminhisaabo tenant invitations
Section titled “hisaabo tenant invitations”List pending invitations for the current tenant.
hisaabo tenant invitationshisaabo tenant invitations --jsonhisaabo tenant revoke-invitation
Section titled “hisaabo tenant revoke-invitation”Revoke a pending invitation.
hisaabo tenant revoke-invitation <invitationId>Document types
Section titled “Document types”Beyond standard invoices, Hisaabo supports six additional document types. Each type has the same five operations: list, get, create, status, and delete.
Quotation
Section titled “Quotation”hisaabo quotation listhisaabo quotation list --party "Gupta Enterprises" --jsonhisaabo quotation get quot_xxxxxxxxxxhisaabo quotation create \ --party "Mehta & Sons" \ --item "Basmati Rice 25kg" --quantity 50 --unit bag --price 1250 \ --valid-until 2026-04-30hisaabo quotation status quot_xxxxxxxxxx acceptedhisaabo quotation delete quot_xxxxxxxxxxCredit Note
Section titled “Credit Note”hisaabo credit-note listhisaabo credit-note get cn_xxxxxxxxxxhisaabo credit-note create --party "Sharma Traders" --invoice BB-12948 --reason "Goods returned"hisaabo credit-note status cn_xxxxxxxxxx issuedhisaabo credit-note delete cn_xxxxxxxxxxDebit Note
Section titled “Debit Note”hisaabo debit-note listhisaabo debit-note get dn_xxxxxxxxxxhisaabo debit-note create --party "Vinod & Sons" --invoice BB-12900 --reason "Short supply"hisaabo debit-note status dn_xxxxxxxxxx issuedhisaabo debit-note delete dn_xxxxxxxxxxDelivery Challan
Section titled “Delivery Challan”hisaabo challan listhisaabo challan get dc_xxxxxxxxxxhisaabo challan create \ --party "Gupta Enterprises" \ --item "Mustard Oil 15L" --quantity 10 --unit canhisaabo challan status dc_xxxxxxxxxx deliveredhisaabo challan delete dc_xxxxxxxxxxProforma Invoice
Section titled “Proforma Invoice”hisaabo proforma listhisaabo proforma get pf_xxxxxxxxxxhisaabo proforma create \ --party "Mehta & Sons" \ --item "Toor Dal 50kg" --quantity 5 --unit bag --price 4200hisaabo proforma status pf_xxxxxxxxxx approvedhisaabo proforma delete pf_xxxxxxxxxxSales Return
Section titled “Sales Return”hisaabo sales-return listhisaabo sales-return get sr_xxxxxxxxxxhisaabo sales-return create --party "Sharma Traders" --invoice BB-12948hisaabo sales-return status sr_xxxxxxxxxx processedhisaabo sales-return delete sr_xxxxxxxxxxPurchase Return
Section titled “Purchase Return”hisaabo purchase-return listhisaabo purchase-return get pr_xxxxxxxxxxhisaabo purchase-return create --party "Vinod & Sons" --invoice BB-12900hisaabo purchase-return status pr_xxxxxxxxxx processedhisaabo purchase-return delete pr_xxxxxxxxxxConvert a document
Section titled “Convert a document”Convert one document type to another. The most common use case is converting a delivery challan into a tax invoice after goods are delivered.
# Convert a delivery challan to a sale invoicehisaabo document convert \ --from dc_xxxxxxxxxx \ --from-type delivery_challan \ --to-type invoiceThe --skip-stock-adjustment flag is available when converting a challan to an invoice to avoid double-deducting stock that was already deducted when the challan was created.
hisaabo session
Section titled “hisaabo session”Manage active sessions across devices.
hisaabo session list
Section titled “hisaabo session list”List all active sessions for the current user.
hisaabo session listhisaabo session list --expiredhisaabo session list --jsonShows device/browser, IP address, last activity time, creation date, and marks the current session. Session IDs shown here are opaque hashes, not the session tokens themselves, and are abbreviated in the table (use --json for the full value).
hisaabo session revoke
Section titled “hisaabo session revoke”Terminate a specific session by ID.
hisaabo session revoke <sessionId> --yesThe revoked session is immediately invalidated. The user on that device will be redirected to the login page.
hisaabo session revoke-all
Section titled “hisaabo session revoke-all”Sign out from all devices (including the current one).
hisaabo session revoke-all --yeshisaabo api-key
Section titled “hisaabo api-key”Generate and manage API keys for automation scripts, CI/CD pipelines, and third-party integrations.
hisaabo api-key list
Section titled “hisaabo api-key list”hisaabo api-key listhisaabo api-key list --jsonShows key name, creation date, expiry date, and last-used timestamp. The key secret is only shown once at creation time.
hisaabo api-key create
Section titled “hisaabo api-key create”hisaabo api-key create --name "CI Pipeline" --expires-in-days 90hisaabo api-key create --name "Read-only export script" --expires-in-days 30Keys expire after --expires-in-days (default 90, maximum 365). Copy the returned key immediately — it is not shown again. Creating keys requires an admin role. Keys are revoked automatically when the member is removed or their role changes.
hisaabo api-key revoke
Section titled “hisaabo api-key revoke”hisaabo api-key revoke apikey_xxxxxxxxxx --yesRevoked keys stop working instantly.
Common flags
Section titled “Common flags”| Flag | Description |
|---|---|
--json |
Output raw JSON instead of formatted tables (on most commands) |
-y, --yes |
Skip the confirmation prompt on destructive commands |
--help |
Show help for any command |
--version |
Print the CLI version |
Destructive commands need --yes when non-interactive. Commands that delete, merge, revoke, cancel, remove or restore data (for example invoice delete, party merge, session revoke, api-key revoke, tenant remove, restore) prompt for confirmation in a terminal. When stdin is not a TTY (cron, CI, an AI agent running shell commands) they refuse with a usage error unless you pass --yes.
Practical Examples
Section titled “Practical Examples”Morning dashboard check
Section titled “Morning dashboard check”hisaabo dashboard --period todayOr with the full picture:
#!/bin/bashecho "=== $(date +"%d %b %Y") ==="hisaabo dashboard --period todayecho ""echo "--- Overdue invoices ---"hisaabo invoice list --status overdue --sort oldest-first --limit 10echo ""echo "--- Low stock ---"hisaabo item list --low-stockCreating an invoice from the terminal
Section titled “Creating an invoice from the terminal”hisaabo invoice create \ --party "Gupta Enterprises" \ --item "Basmati Rice 25kg" --quantity 20 --unit bag --price 1250 \ --item "Toor Dal 50kg" --quantity 5 --unit bag --price 4200 \ --due-date 2026-04-10Then immediately get the PDF:
INVOICE_ID=$(hisaabo invoice create \ --party "Gupta Enterprises" \ --item "Basmati Rice 25kg" --quantity 20 --unit bag --price 1250 \ --json | jq -r '.id')
hisaabo invoice pdf "$INVOICE_ID" --output /tmp/echo "PDF saved: /tmp/${INVOICE_ID}.pdf"Checking overdue invoices
Section titled “Checking overdue invoices”# Human-readable tablehisaabo invoice list --status overdue --sort oldest-first
# Pipe to jq for custom formattinghisaabo invoice list --status overdue --json | jq -r \ '.[] | "\(.invoiceNumber) \(.party.name) ₹\(.totalAmount) \(.daysOverdue) days overdue"'
# Total amount overduehisaabo invoice list --status overdue --json | \ jq '[.[].totalAmount | tonumber] | add'GST filing prep (export GSTR-1)
Section titled “GST filing prep (export GSTR-1)”#!/bin/bashMONTH=3YEAR=2026OUTPUT_DIR="/var/gst-reports/${YEAR}-${MONTH}"mkdir -p "$OUTPUT_DIR"
# Human-readable summaryhisaabo gst r1 --month "$MONTH" --year "$YEAR"
# Export CSV for CA or GST portal uploadhisaabo gst r1 --month "$MONTH" --year "$YEAR" \ --csv --output "$OUTPUT_DIR/gstr1-${YEAR}-${MONTH}.csv"
hisaabo gst r3b --month "$MONTH" --year "$YEAR" \ --csv --output "$OUTPUT_DIR/gstr3b-${YEAR}-${MONTH}.csv"
echo "GST exports ready in $OUTPUT_DIR"Scripting with --json | jq
Section titled “Scripting with --json | jq”# Top 5 customers by outstanding balancehisaabo party list --outstanding --json | \ jq 'sort_by(.outstandingBalance | tonumber) | reverse | .[0:5] | .[] | "\(.name): ₹\(.outstandingBalance)"'
# Items needing reorder with suggested quantityhisaabo item list --low-stock --json | jq -r \ '.[] | "REORDER \(.name): have \(.stockQuantity) \(.unit), min \(.lowStockThreshold) \(.unit)"'
# Monthly revenue from dashboardhisaabo dashboard --period this-month --json | jq -r '.totalSales'
# Count invoices by statushisaabo invoice list --json | jq 'group_by(.status) | .[] | {status: .[0].status, count: length}'Power User Workflows
Section titled “Power User Workflows”Morning brief with overdue and low-stock checks
Section titled “Morning brief with overdue and low-stock checks”#!/bin/bash# morning-brief.sh — add to cron: 0 8 * * *
DASH=$(hisaabo dashboard --period today --json)OVERDUE=$(hisaabo invoice list --status overdue --sort oldest-first --limit 5 --json)LOW=$(hisaabo item list --low-stock --json)
echo "=== MORNING BRIEF — $(date +"%d %b %Y") ==="echo ""echo "Revenue today: $(echo $DASH | jq -r '.totalSales')"echo "Outstanding: $(echo $DASH | jq -r '.receivable')"echo ""
OVERDUE_COUNT=$(echo $OVERDUE | jq 'length')if [ "$OVERDUE_COUNT" -gt 0 ]; then echo "OVERDUE ($OVERDUE_COUNT):" echo $OVERDUE | jq -r \ '.[] | " \(.invoiceNumber) — \(.party.name) — ₹\(.totalAmount) (\(.daysOverdue) days)"' echo ""fi
LOW_COUNT=$(echo $LOW | jq 'length')if [ "$LOW_COUNT" -gt 0 ]; then echo "LOW STOCK ($LOW_COUNT):" echo $LOW | jq -r '.[] | " \(.name): \(.stockQuantity) \(.unit) left"'fiMonthly GST filing prep
Section titled “Monthly GST filing prep”#!/bin/bash# gst-filing-prep.sh — cron: 0 8 28 * *
MONTH=$(date +%m)YEAR=$(date +%Y)OUTPUT_DIR="/var/gst-reports/${YEAR}-${MONTH}"mkdir -p "$OUTPUT_DIR"
hisaabo gst r1 --month "$MONTH" --year "$YEAR" \ --csv --output "$OUTPUT_DIR/gstr1.csv"
hisaabo gst r3b --month "$MONTH" --year "$YEAR" \ --csv --output "$OUTPUT_DIR/gstr3b.csv"
SUMMARY=$(hisaabo gst r3b --month "$MONTH" --year "$YEAR")
{ echo "GST data for ${YEAR}-${MONTH} attached." echo "" echo "$SUMMARY" echo "" echo "Please file before the 11th."} | mail -s "GST Data ${YEAR}-${MONTH}" \ -a "$OUTPUT_DIR/gstr1.csv" \ -a "$OUTPUT_DIR/gstr3b.csv" \ "$CA_EMAIL"Outstanding aging report (weekly)
Section titled “Outstanding aging report (weekly)”#!/bin/bash# aging-report.sh — cron: 0 9 * * 1
hisaabo report outstanding --json | jq -r ' "RECEIVABLES AGING — " + (now | strftime("%d %b %Y")) + "\n" + "0–30 days: ₹\(.aging."0_30")\n" + "31–60 days: ₹\(.aging."31_60")\n" + "61–90 days: ₹\(.aging."61_90")\n" + "90+ days: ₹\(.aging."90_plus")\n"For AI Agent Developers
Section titled “For AI Agent Developers”CLI vs. MCP: which to use
Section titled “CLI vs. MCP: which to use”| Scenario | Use CLI | Use MCP |
|---|---|---|
| Cron jobs and scheduled automation | Yes | No |
| AI assistants in conversation (Claude Desktop, etc.) | No | Yes |
| Shell pipeline data processing | Yes | No |
| OpenClaw agents that take actions | No | Yes |
| CI/CD pipelines and deployment scripts | Yes | No |
| Natural-language business queries | No | Yes |
| Bulk data export and reporting | Yes | No |
Exposing the CLI as an agent tool
Section titled “Exposing the CLI as an agent tool”export const hisaaboCLI = { name: "hisaabo_cli", description: "Run a hisaabo CLI command and return the JSON output. " + "Available subcommands: dashboard, " + "invoice list/get/create/update/pdf/delete, " + "party list/get/create/delete/ledger/ledger-report/stats/top-items/merge, " + "item list/get/create/delete/stock/stock-history/stock-movements/low-stock-count/price-history/sales-stats/variants/merge/switch-base-unit/rename-unit, " + "payment list/create/delete/unpaid-invoices/untracked/default-account/assign-account, " + "expense list/create/delete, " + "gst r1/r3b, shipment list/get/create/update, " + "bank list/get/create/transfer/transactions, " + "report daybook/outstanding/tax-summary/item-sales/stock, " + "target list/create/my, import parties/items, " + "store settings/orders/order-confirm/order-cancel/check-slug/items/items-toggle, " + "tenant list/select/members/invite/remove/role, " + "quotation list/get/create/status/delete, " + "credit-note list/get/create/status/delete, " + "debit-note list/get/create/status/delete, " + "challan list/get/create/status/delete, " + "proforma list/get/create/status/delete, " + "sales-return list/get/create/status/delete, " + "purchase-return list/get/create/status/delete, " + "document convert, " + "api-key list/create/revoke", parameters: { type: "object", properties: { command: { type: "string", description: "The hisaabo subcommand to run, e.g. 'invoice list --status overdue --json'", }, }, required: ["command"], }, execute: async ({ command }: { command: string }) => { const { stdout, stderr } = await exec(`hisaabo ${command}`); if (stderr) throw new Error(stderr); return JSON.parse(stdout); },};Cron Job Reference
Section titled “Cron Job Reference”HISAABO_API_URL=https://your-hisaabo-instance.comHISAABO_TOKEN=hisaabo_key_xxxxxxxxxxxxxxxxxxHISAABO_TENANT_ID=tenant-uuid-hereHISAABO_BUSINESS_ID=business-uuid-here
# Daily summary at 8:00 AM0 8 * * * root hisaabo dashboard --period today --json | \ jq -r '"Revenue: ₹\(.totalSales)\nOutstanding: ₹\(.receivable)"' | \
# Overdue invoice alert at 9:00 AM0 9 * * * root /opt/hisaabo-scripts/morning-brief.sh
# Stock check twice daily0 9,17 * * * root /opt/hisaabo-scripts/low-stock-check.sh
# Monthly GST export on the 28th at 8 AM0 8 28 * * root /opt/hisaabo-scripts/gst-filing-prep.sh
# Weekly aging report every Monday0 9 * * 1 root /opt/hisaabo-scripts/aging-report.shConfiguration File
Section titled “Configuration File”The CLI reads from ~/.config/hisaabo/config.json, created automatically on first hisaabo login:
{ "apiUrl": "https://your-hisaabo-instance.com", "token": "hisaabo_key_xxxxxxxxxxxxxxxxxx", "tenantId": "tenant-uuid-here", "businessId": "business-uuid-here", "businessName": "Sharma Traders"}The token is stored in plaintext; the file is created with mode 0600 inside a 0700 directory. Environment variables (HISAABO_TOKEN with HISAABO_API_URL) take priority over the config file and are never written to disk, so prefer them for CI and shared machines.
Related Documentation
Section titled “Related Documentation”- AI & Automation overview
- MCP Server — For interactive AI agents and Claude Desktop
- Integrations — WhatsApp, Slack, Google Sheets, and more
- API Reference
- Self-Hosting — Running Hisaabo on your own infrastructure