wflow CLI
The wflow.com public API from the command line. Every API operation is one
command, every command prints JSON (except a download to --output -, which writes the file's raw bytes to
stdout), and wflow <command> --help documents what it sends and returns.
Install
pipx install wflow-cli # or: uv tool install wflow-cli or: pip install wflow-cli
wflow --version
Python 3.12 or newer. pipx and uv tool keep the CLI in its own environment.
Set up an API client
The CLI signs in as an API client with the client_credentials grant — a machine identity, not a person.
- Create an API client with the
client_credentialsgrant in admin.wflow.com. - Allow the client in each workspace it should reach: in the workspace, Settings → Integrations → API accesses.
- Give the CLI the credentials:
export WFLOW_CLIENT_ID="your-full-client-id"
export WFLOW_CLIENT_SECRET="your-client-secret"
export WFLOW_ORGANIZATION="your-workspace" # optional: the default for --organization/-o
| Variable | Meaning |
|---|---|
WFLOW_CLIENT_ID, WFLOW_CLIENT_SECRET |
required |
WFLOW_ENV |
prod (default) or test |
WFLOW_ORGANIZATION |
default workspace slug for -o |
WFLOW_API_BASE, WFLOW_ACCOUNT_BASE |
override the API and identity hosts |
Credentials are read from the environment only; no option takes a secret.
Use it
wflow --help # every command, grouped by area
wflow get-organization -o acme
wflow list-register-partners -o acme --page-size 50 --query 'name = "Acme s.r.o."'
wflow list-documents -o acme --sort "created desc"
A list command that takes --page and --page-size returns one page: {items, totalItems, pageSize, page}.
Compare totalItems with what you have before assuming you have everything.
Writing
Options that take a record or a list of records take JSON — inline, from a file with @, or from stdin with -
(one option per command can read stdin):
wflow patch-register-partners -o acme --partners @partners.json
cat partners.json | wflow patch-register-partners -o acme --partners -
update-register-* replaces the whole register: every record you leave out is retired. patch-register-* leaves
the records you do not send alone. Both replace each record you send as a whole, so send the full record. wflow
keeps no version history — read wflow <command> --help before writing.
Files
wflow upload-document-file -o acme --document-id <id> --file ./invoice.pdf
wflow download-document-file -o acme --file-id <id> --output ./invoice.pdf
wflow download-document-file -o acme --file-id <id> --output - > invoice.pdf
An upload is stored under the file's own name unless you pass --filename. A download never overwrites an
existing file unless you pass --force.
Exit codes
| Code | Meaning |
|---|---|
0 |
success; the result is on stdout as JSON, or the file's raw bytes for a download with --output - |
1 |
wflow refused or failed the call, or the input was refused before anything was sent; one line on stderr says why |
2 |
the command line or the environment is wrong; stderr has a usage message or says what to set |
For AI agents
Every command prints its result as JSON on stdout and the reason for a failure on stderr, so an agent can run
wflow from a shell, check the exit code and parse the result. The one exception is a download with --output -,
which writes the file's raw bytes to stdout instead. wflow <command> --help is the documentation for
that command.
Python
The commands are generated from the wflow-api package, which you can use
directly.
Metadata
Release files for wflow-cli 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| wflow_cli-0.1.0.tar.gz | 11.0 kB | Without provenance | Details for wflow_cli-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| wflow_cli-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for wflow_cli-0.1.0-py3-none-any.whl |
Total release size: 24.4 kB
Release files / wflow_cli-0.1.0.tar.gz
| Download URL | wflow_cli-0.1.0.tar.gz |
|---|---|
| Size | 11.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d64e1d7f719ad027d87c69b36b634ea00fdaf039ada103e0665a1ffd8ad0d5e6
|
|
BLAKE2b-256 checksum How to use checksums |
3f1febf42f7a024553c9aa9a952fcd29e865ad460e64e6938f55e6a1292dfcae
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / wflow_cli-0.1.0-py3-none-any.whl
| Download URL | wflow_cli-0.1.0-py3-none-any.whl |
|---|---|
| Size | 13.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
902f5fa4ff93ce29a4bf717bbf45f5ad287047edfb3a05acda1372fe76c3cedc
|
|
BLAKE2b-256 checksum How to use checksums |
4fc7aea4b829aaf68f1f45aa9aa4f253258c857cb930aceb13c0d91f39dae610
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for wflow-cli 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.