Command-line wrapper around the official Asana Python SDK
Project description
asana-api-cli
A CLI tool for the Asana API. It thinly wraps the official
python-asana SDK with click, exposing
every API endpoint from the command line via asana-api <group> <command>.
Installation
pip install asana-api-cli
# or, to install as an isolated CLI tool
pipx install asana-api-cli
Environment variables
| Name | Required | Description |
|---|---|---|
ASANA_ACCESS_TOKEN |
Yes (at runtime only) | Asana Personal Access Token |
ASANA_DEFAULT_WORKSPACE |
No | Default workspace GID for endpoints that require it |
The token can be issued from the
Asana Developer Console.
No token is needed for --help or argument-error output.
export ASANA_ACCESS_TOKEN="1/12345..."
export ASANA_DEFAULT_WORKSPACE="12345678" # optional
Shell completion
asana-api is built with Click, which supports dynamic shell completion.
To enable bash completion, add the following line to your ~/.bashrc:
eval "$(_ASANA_API_COMPLETE=bash_source asana-api)"
Then reload the shell (source ~/.bashrc or open a new terminal). Pressing
<TAB> after asana-api will now complete subcommands and options.
For zsh or fish, replace bash_source with zsh_source or fish_source
and add the line to ~/.zshrc or ~/.config/fish/config.fish respectively.
Usage
# Version and help
asana-api --version
asana-api --help
asana-api tasks --help
asana-api tasks get-tasks --help
# List workspaces and projects
asana-api workspaces get-workspaces
asana-api projects get-projects-for-workspace
asana-api projects get-projects --workspace <WORKSPACE_GID>
# List tasks (first page only by default)
asana-api tasks get-tasks --project <PROJECT_GID>
# Preview the first few items
asana-api tasks get-tasks --project <PROJECT_GID> --max-items 5
# Fetch every item across pages
asana-api tasks get-tasks --project <PROJECT_GID> --all-items
# Single task
asana-api tasks get-task --task <TASK_GID>
# Create a task (body is a JSON string)
asana-api tasks create-task --body '{"data":{"name":"new task","projects":["<PID>"]}}'
# Output formats
asana-api tasks get-tasks --project <PID> --output table
asana-api tasks get-tasks --project <PID> --query '.data' --output csv
See Pagination for fetching across pages and
Global options for --debug, --access-token, etc.
Workspace resolution
Many API endpoints require a workspace. For those endpoints (e.g.
get-projects-for-workspace), the CLI resolves it in this order:
--workspace <GID>on the commandASANA_DEFAULT_WORKSPACEenvironment variable
For endpoints where workspace is optional (e.g. get-tasks), the env-var
fallback is not used — pass --workspace explicitly if needed. This
prevents conflicts with other scope parameters like --project that are
mutually exclusive with workspace in the Asana API.
Pagination
Listing endpoints (e.g. tasks get-tasks) return paginated results. The CLI
provides four ways to control how much is fetched:
| Option | Behavior |
|---|---|
| (none) | Fetch a single page (Asana default: 100 items) |
--max-items N |
Fetch up to N items, auto-paginating across pages. The last request is automatically capped to the remaining count. |
--all-items |
Fetch every page until the server reports no more |
--offset <TOKEN> |
Manual pagination: pass the next_page.offset token from the previous response |
--max-items and --all-items are mutually exclusive.
--page-size N tunes the per-page request size (Asana API requires 1-100,
default 100). Rarely needed — combine with --all-items or --max-items only
when the default doesn't suit (e.g. very large rows or rate-limit tuning).
# Auto-paginate up to 250 items
asana-api tasks get-tasks --project <PID> --max-items 250
# Fetch everything
asana-api tasks get-tasks --project <PID> --all-items
# Manual pagination using the offset token
asana-api tasks get-tasks --project <PID> --offset <TOKEN>
Global options
These options work at any level of the command tree, so the following are equivalent:
asana-api --debug tasks get-tasks --project <PID>
asana-api tasks get-tasks --project <PID> --debug
When the same option is given at multiple levels, the more specific (later) one wins.
| Option | Description |
|---|---|
--access-token TOKEN |
Asana personal access token (default: $ASANA_ACCESS_TOKEN) |
--host URL |
Override API base URL (default: https://app.asana.com/api/1.0) |
--proxy URL |
HTTP/HTTPS proxy URL |
--no-verify-ssl |
Disable TLS certificate verification (insecure) |
--ca-cert PATH |
Path to a PEM bundle of trusted CA certificates |
--retries N |
Number of retries on 429/5xx responses (default: 5) |
--timeout SECONDS |
Per-request timeout in seconds |
--temp-dir PATH |
Directory for temporary downloads |
--debug |
Print HTTP request/response to stderr for troubleshooting |
Development
See docs/development.md for building from source, project layout, and library usage.
License
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file asana_api_cli-1.5.0.tar.gz.
File metadata
- Download URL: asana_api_cli-1.5.0.tar.gz
- Upload date:
- Size: 44.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f9806cf8de6ef6f8e6ba95621ad7cc45acc2155ec22c7ad893643112c21156ff
|
|
| MD5 |
f3cf0338a3228b77a4cd8f01ba7bef82
|
|
| BLAKE2b-256 |
a26bfcb65711f5312f75f29ad1a5182d88c1e66093c66d2dc7f314c1d8c0fff0
|
Provenance
The following attestation bundles were made for asana_api_cli-1.5.0.tar.gz:
Publisher:
publish.yml on izumo-m/asana-api-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
asana_api_cli-1.5.0.tar.gz -
Subject digest:
f9806cf8de6ef6f8e6ba95621ad7cc45acc2155ec22c7ad893643112c21156ff - Sigstore transparency entry: 1385546784
- Sigstore integration time:
-
Permalink:
izumo-m/asana-api-cli@4411b7556ee3bcfddf80010b9862e851f51acd9b -
Branch / Tag:
refs/tags/v1.5.0 - Owner: https://github.com/izumo-m
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@4411b7556ee3bcfddf80010b9862e851f51acd9b -
Trigger Event:
push
-
Statement type:
File details
Details for the file asana_api_cli-1.5.0-py3-none-any.whl.
File metadata
- Download URL: asana_api_cli-1.5.0-py3-none-any.whl
- Upload date:
- Size: 86.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
33af09a0a8ddfcdfdf793902c7be8bc83fa149048539b6a97721017b4222b183
|
|
| MD5 |
677019dcc27d2f1475d57022730f1404
|
|
| BLAKE2b-256 |
962c54187b9ae1daaa2db1c4f0d9c32e9191ea2cc7c5a877580d9d34b7350ac6
|
Provenance
The following attestation bundles were made for asana_api_cli-1.5.0-py3-none-any.whl:
Publisher:
publish.yml on izumo-m/asana-api-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
asana_api_cli-1.5.0-py3-none-any.whl -
Subject digest:
33af09a0a8ddfcdfdf793902c7be8bc83fa149048539b6a97721017b4222b183 - Sigstore transparency entry: 1385546788
- Sigstore integration time:
-
Permalink:
izumo-m/asana-api-cli@4411b7556ee3bcfddf80010b9862e851f51acd9b -
Branch / Tag:
refs/tags/v1.5.0 - Owner: https://github.com/izumo-m
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@4411b7556ee3bcfddf80010b9862e851f51acd9b -
Trigger Event:
push
-
Statement type: