Quickstart
1. Point koban at an Invoice Ninja API
koban is environment-first. The fastest way to try it is the public Invoice Ninja demo API, which accepts the demo token TOKEN:
export INVOICE_NINJA_BASE_URL="https://demo.invoiceninja.com"
export INVOICE_NINJA_API_TOKEN="TOKEN"For your own account, point at hosted production (https://invoicing.co, the default) or your self-hosted base URL, and use a real API token. See Configuration for details.
2. Read some data
koban statics --output json
koban clients list --page 1 --per-page 20
koban clients show <id> --output json
koban invoices list
koban invoices list --filter status_id=gt:1 --sort 'date|desc' --all --limit 50
koban invoices show <id>List commands accept raw Invoice Ninja query filters and sorting via --filter and --sort. --all paginates (capped at 100 pages); --limit bounds the row count.
3. Discover a schema
The template and edit-template commands return default/editable payloads straight from Invoice Ninja's read-only GET /create and GET /{id}/edit routes — handy for seeing the exact field shape before you write:
koban invoices template --output json
koban invoices edit-template <id> --output json4. Preview a write, then confirm
Writes are guarded. Use --dry-run to preview the exact request, then --yes to actually send it:
# Preview — nothing leaves your machine.
koban invoices create --client-id <client_id> \
--line-item product_key=Consulting,quantity=1,cost=100 \
--dry-run
# Send it.
koban invoices create --client-id <client_id> \
--line-item product_key=Consulting,quantity=1,cost=100 \
--yesRead more about the guardrails in Safety, and the full command shape in the Commands overview.