Skip to main content
Use this page as a scannable reference for the DualEntry CLI. For getting started, see the Quickstart Guide.

Global options

The flags below apply to every CLI invocation, regardless of subcommand.
dualentry --help is the fastest way to see all available commands. You can also run dualentry [resource] --help for help on a specific resource.

Authentication commands

The authentication commands manage how the CLI connects to your DualEntry account. Login runs the OAuth flow against /public/v2/oauth/authorize/ and /public/v2/oauth/token/, then stores the resulting API key in your system keychain. On a machine with no usable keychain, the CLI falls back to a file, so treat that file as a credential if you are working on a shared host. For CI/CD or headless environments, set the X_API_KEY environment variable instead. See Configuration below.

Resource commands

The Resource commands section lists all CLI resources grouped by domain.

Standard subcommands

Most resources support these subcommands: Run dualentry [resource] --help to see the exact flags and required arguments for each subcommand; they vary by resource.

Creating and updating records

create and update both read the record body from a JSON file; there is no way to pass fields directly as flags:
Unlike get, update does not strip a display prefix like IN- from its record-ID argument; pass the bare number or ID get shows you, not the prefixed one.

Read-only resources

Several resources are read-only or non-editable and drop create and/or update: accounts, companies, budgets, paper-checks, depreciation-books, and workflows support only list and get. inbox is more restricted still, supporting only list, with no get.

Looking up records by number or ID

On resources that carry a record number, get accepts either a number or an ID and works out which you gave it. Two explicit forms are available when you want to be unambiguous:

Resource-specific subcommands

A few subcommands are resource-specific rather than universal:
delete is real on recurring records and removes the schedule. It is not available on posted transactions, so do not assume the absence of a delete command elsewhere protects a recurring template.

Intercompany journal entry helpers

intercompany-journal-entries validate checks a JSON file offline (line items present, debits equal credits, at least two companies) unless you pass --online, which also confirms every company_id in the file is one you can access:
intercompany-journal-entries template writes a sample payload to stdout, or to a file with --output/-o.

Receivables

Payables

Accounting

Master data

Automation

Bank matching

dualentry bank-match doesn’t follow the list/get/create/update shape above. It has its own subcommands for reconciling bank-feed rows against DualEntry transactions. bank-transactions list accepts --financial-account-id, --matching-status, --date-from, --date-to, --is-posted/--not-posted, and --include-expired, plus the standard --limit/--offset/--all. suggestions list accepts --financial-transaction-id, --suggestion-type (match or create), and --highest-ranked. match confirms a 1:1 or partial match with --financial-transaction-id plus exactly one of --transaction-id or --entry-id, or a full 1:1/M:N body via --file/-f (these are mutually exclusive). unmatch takes exactly one of --financial-transaction-id or --match-group-id; unmatching any member dissolves the whole group. template writes to stdout or --output/-o, and accepts --type/-t (1:1, m:n, or partial).

Common flags

The flags below work across multiple resource commands and control output format, pagination, and filtering.

Output format

The output format flag toggles between human-readable tables and machine-readable JSON.
  • Table format (default): a human-readable, column-aligned table rendered with Rich. Best for quick lookups in the terminal.
  • JSON format: raw JSON output. Best for scripting, piping to jq, or feeding into other tools.
The example below shows both output modes for the same command:

Pagination

Three flags control how much a list command returns. By default, list commands return one page. Use --all when you need the complete dataset:
--limit and --offset page through a fixed range in a single request. --all fetches every page automatically, issuing one request per page, which is slower than a single page on a large resource.

Filtering

Four filters are available on most list commands, though a few resources with hand-rolled list commands (for example accounts) only support --search, and depreciation-books list supports none of them: Three more are entity filters, and these do vary by resource, because a resource only exposes the ones that make sense for it: Run dualentry [resource] list --help to see which entity filters a specific resource accepts.

Configuration

The configuration commands and environment variables below control how the CLI connects to DualEntry.

Viewing config

Display your current configuration, including API URL and auth state, with the following command:

Setting a custom API URL

config set-url persists a custom API base URL to your config file (~/.dualentry/config.toml), as an alternative to setting DUALENTRY_API_URL every session. Every organization, sandbox or production, is reached at the same https://api.dualentry.com by default; which one you’re working against depends on the API key you authenticate with, not the URL (see Authentication). config set-url exists as an escape hatch for pointing the CLI at a different host entirely:
A DUALENTRY_API_URL environment variable, when set, overrides whatever this stores.

Environment variables

Set the variables below to override default CLI behavior, primarily for CI/CD or non-production environments.

Exit codes

The CLI returns 0 on success and 1 on any error, including a failed request, a missing argument, or an authentication failure. Check the process exit code in scripts rather than parsing output.

Example output

The columns below appear in the table output of dualentry invoices list: record ID, document number, dates, company, counterparty, currency, financial amounts, and status. Other resources follow a similar table layout with columns relevant to that record type.

Known limitations

The CLI is early-stage software. The current limitations are:
  • Early version: the CLI is at v0.1.18 at the time of writing; expect evolving commands and occasional rough edges.
  • Delete is limited to recurring records: no other resource supports delete, and several (see Resource commands) don’t even support create or update.
  • Performance: some operations may be slow, especially on large datasets.
  • Python 3.11+ required: Homebrew handles this automatically; other install methods require you to have Python 3.11+ already installed.
Last modified on September 23, 2026