BillOS v1
Console llms.txt OpenAPI

CLI: BillOS from the terminal

npm install -g billos
billos login

billos login prints a short code and opens the console; you approve the code there with your signed-in developer account, and the CLI receives a freshly-minted key of its own over a private device code. The key never passes through the browser, and it is stored at ~/.config/billos/config.json with 0600 permissions. Already hold a key? billos login --key bk_live_... skips the pairing.

Command
billos whoamiWhich key is active, and how many businesses it holds
billos businessesThe businesses on the key, with their standing
billos use <businessId>Set the default business for every later command
billos docs [--status --from --to --take]List documents
billos invoice --customer "שם" --amount 350Issue a document (`--type receipt\invoice\invoice-receipt, --desc, --method, --phone`) and print the customer's link
billos expenses [--status --from --to]List expenses
billos expense --supplier "שם" --amount 118 [--vat 18]Record an expense
billos cancel <documentId> [--reason "…"]Issue the document's credit note: the only lawful way to undo an issued document
billos customersThe business's customers
billos usageYour API traffic over the last 30 days
billos logoutDelete the local key (revoking it is a console action)

Add --json to any command and it prints the raw API shape and nothing else, which is the mode to pipe into jq or a script. --business <id> acts on one business without changing your default.

Amounts on the CLI are shekels, not agorot: --amount 350.50 is ₪350.50. It is the one surface where people type the number themselves, so the CLI converts at the edge; every API payload underneath is still integer agorot.

BILLOS_API_KEY overrides the stored key and BILLOS_API_ORIGIN the host, which is how the CLI runs in CI without a login: mint a key for the pipeline, revoke it when the pipeline changes hands.