Fulfil CLI
The command-line interface for Fulfil — query data, manage records, run reports, and automate workflows from the terminal.
Install
# Recommended: install with uv (https://docs.astral.sh/uv/)
uv tool install fulfil-cli
# Or with pipx
pipx install fulfil-cli
Don't have uv or pipx? Install uv first — it's a single command:
curl -LsSf https://astral.sh/uv/install.sh | sh(macOS/Linux) orpowershell -c "irm https://astral.sh/uv/install.ps1 | iex"(Windows). Then runuv tool install fulfil-cli.
Getting Started
# 1. Log in to your Fulfil workspace
fulfil auth login
# 2. List sales orders
fulfil sales_order list --fields reference,state,total_amount
# 3. Count products
fulfil product count
# 4. Look up a contact
fulfil contact list --where '{"name": "Acme Corp"}' --fields name,email
Authentication
The CLI stores your API key in the system keyring (macOS Keychain, GNOME Keyring, Windows Credential Locker).
# Interactive — prompts for workspace and API key
fulfil auth login
# Non-interactive
fulfil auth login --workspace acme.fulfil.io --api-key sk_live_...
# Check current auth
fulfil auth status
# List all configured workspaces
fulfil workspaces
# Switch workspace
fulfil auth use other-workspace.fulfil.io
# Log out
fulfil auth logout
Environment variables (useful for CI/scripts):
export FULFIL_API_KEY=sk_live_...
export FULFIL_WORKSPACE=acme.fulfil.io
Priority: --token flag > FULFIL_API_KEY env var > system keyring.
Working with Records
Any Fulfil model name is a valid command. Each model supports: list, get, create, update, delete, count, call, and describe.
Listing records
# List with specific fields
fulfil sales_order list --fields reference,state,total_amount
# Filter with MongoDB-style queries
fulfil sales_order list --where '{"state": "confirmed"}'
fulfil sales_order list --where '{"sale_date": {"gte": "2025-01-01"}}'
fulfil sales_order list --where '{"or": [{"state": "draft"}, {"state": "confirmed"}]}'
# Sort results
fulfil sales_order list --order sale_date:desc
fulfil sales_order list --order sale_date:desc,reference:asc
# Control page size
fulfil sales_order list --limit 50
# Paginate — the CLI prints the full command for the next page
fulfil sales_order list --cursor <token-from-previous-response>
Available filter operators: gt, gte, lt, lte, ne, in, not_in, contains, startswith, endswith.
Getting records by ID
fulfil sales_order get 42
fulfil sales_order get 1,2,3
Creating records
# Single record (from stdin)
echo '{"name": "Acme Corp"}' | fulfil contact create
# Record with nested lines (e.g. contact with addresses)
echo '{"name": "Acme Corp", "addresses": [{"street": "100 Broadway", "city": "New York"}, {"street": "45 Industrial Pkwy", "city": "Newark"}]}' | fulfil contact create
# Multiple records at once (preferred — never loop single creates)
echo '[{"name": "Alice"}, {"name": "Bob"}]' | fulfil contact create
# From a file
fulfil contact create data.json
Updating records
echo '{"comment": "Approved by finance"}' | fulfil sales_order update 42
Deleting records
fulfil sales_order delete 42 # asks for confirmation
fulfil sales_order delete 42 --yes # skip confirmation
Counting records
fulfil product count
fulfil sales_order count --where '{"state": "draft"}'
Calling custom methods
fulfil sales_order call confirm --ids 1,2,3
fulfil sales_order call process --ids 42
Exploring models
# List all models you have access to
fulfil models
# Search for models by name
fulfil models --search shipment
# See fields and endpoints for a model
fulfil sales_order describe
fulfil sales_order describe confirm
Reports
# List available reports
fulfil reports
# Run a report with parameters
fulfil reports price_list_report execute --params '{"date_from": "2024-01-01"}'
# Interactive — prompts for each parameter
fulfil reports price_list_report execute -i
# See what parameters a report accepts
fulfil reports price_list_report describe
Raw JSON-RPC
For full control, send raw JSON-RPC requests:
fulfil api '{"method": "system.version", "params": {}}'
# Pipe from stdin
echo '{"method": "model.product.count", "params": {}}' | fulfil api -
Output
| Context | Format |
|---|---|
| Terminal | Rich tables with colors |
| Piped / redirected / CI | JSON (automatic) |
--format flag |
table, json, csv, or ndjson |
# Force JSON and pipe to jq
fulfil sales_order list --fields reference,state --format json | jq '.data[].reference'
# Force format via env var
FULFIL_FORMAT=json fulfil sales_order list
# CSV output
fulfil sales_order list --fields reference,state --format csv
Configuration
fulfil config set key value
fulfil config get key
fulfil config list
Config file location: ~/.config/fulfil/config.toml
Global Options
--token TEXT API key (overrides env and keyring)
--workspace TEXT Workspace domain (e.g. acme.fulfil.io)
--debug Show HTTP request/response details
--quiet, -q Suppress hints and decorative output
--format TEXT Output format: table, json, csv, ndjson
-h, --help Show help
Exit Codes
| Code | Meaning |
|---|---|
0 |
Success |
2 |
Bad arguments |
3 |
Configuration error |
4 |
Authentication error |
5 |
Not found |
6 |
Forbidden |
7 |
Validation error |
8 |
Rate limited |
9 |
Server error |
10 |
Network error |
Shell Completion
fulfil completion # auto-detects zsh/bash/fish
AI Agent Integration
The CLI is designed for programmatic use:
- JSON output by default when stdout is piped or redirected (override with
--formatorFULFIL_FORMAT) - Structured exit codes for error handling
- Errors on stderr, data on stdout — safe to parse stdout directly
- Environment variable auth — no interactive prompts:
FULFIL_API_KEY+FULFIL_WORKSPACE
See AGENTS.md for the full agent guide.
Development
git clone https://github.com/fulfilio/fulfil-cli.git
cd fulfil-cli
uv sync --dev
pytest
uv run ruff check .
uv run pre-commit install
Metadata
Release files for fulfil-cli 0.4.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 | |
|---|---|---|---|
| fulfil_cli-0.4.0.tar.gz | 32.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| fulfil_cli-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 75.4 kB
Release files / fulfil_cli-0.4.0.tar.gz
| Download URL | fulfil_cli-0.4.0.tar.gz |
|---|---|
| Size | 32.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b1a21b5583b0f892a36effda5ed961db0594cc494e4196b53cbc622eacbb3f05
|
|
BLAKE2b-256 checksum How to use checksums |
da30c5aca43f2ebe49e439c47d35f1965b85fc70c2c7b99d33bb66d24a7bf46a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.6 {"installer":{"name":"uv","version":"0.12.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / fulfil_cli-0.4.0-py3-none-any.whl
| Download URL | fulfil_cli-0.4.0-py3-none-any.whl |
|---|---|
| Size | 43.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e431139b659c121f26f6410259e8b24acb5cb3e00bd43082f060766587fab634
|
|
BLAKE2b-256 checksum How to use checksums |
74cfe17e50d30f6661beb92840cd2aaecc6d4ab102d27998f0cd2b9c24132323
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.6 {"installer":{"name":"uv","version":"0.12.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|