Commands
This is the full command reference for copera, grouped by domain. Run copera <command> --help for the complete flag list and examples for any command.
Most commands accept --json for machine-readable output, and the CLI auto-switches to JSON when stdout is piped or redirected. See Output formats.
Global flags available on every command: --token, --profile, --json, --output auto|json|table|plain, --quiet/-q, --no-input, --verbose.
Auth
copera auth login # guided browser flow
copera auth login --token=cp_pat_xxx # save a token directly
copera auth login --token # masked paste prompt, no browser
copera auth status # active profile + token source
copera auth whoami # who the token belongs to
copera auth logout # remove the stored credential
See Authentication for token types and login modes.
Boards
copera bases is a built-in alias for copera boards — use whichever feels natural.
copera boards list
copera boards list --query "roadmap" # search by name or description
copera boards get <board-id>
[
{
"_id": "64a1b2c3d4e5f6a7b8c9d0e1",
"name": "Engineering Roadmap",
"description": "Track features, bugs, and milestones across the engineering team.",
"createdAt": "2025-03-10T09:15:42.301Z",
"updatedAt": "2026-02-18T11:30:05.128Z"
}
]
Tables
copera tables list --board <board-id>
copera tables list --board <board-id> --query "tasks"
copera tables get <table-id> --board <board-id>
Each table includes its full column schema — columnId, label, and type, plus options for STATUS and DROPDOWN columns. Use tables get to discover the column IDs and option IDs you need before creating or updating rows.
Export a table
copera tables export <table-id> --board <board-id> --view <view-id> \
--format CSV -o out.csv
--view is required and exports rows in the same shape as a saved view. --format accepts CSV, XLSX, JSON, MARKDOWN, HTML, PDF, ZIP, and ICS. -o/--output-file writes to a path (default: stdout; - also means stdout).
Rows
The CLI exposes the full row lifecycle — list, get, create, update, delete — plus comments, attachments, rich-text cells, and row authentication.
copera rows list --board <board-id> --table <table-id>
copera rows list --board <board-id> --table <table-id> --query "oauth"
copera rows get <row-id> --board <board-id> --table <table-id>
copera rows create --board <board-id> --table <table-id> \
--data '{"columns":[{"columnId":"<column-id>","value":"Hello"}]}'
copera rows update <row-id> --board <board-id> --table <table-id> \
--data '{"columns":[{"columnId":"<column-id>","value":"Updated"}]}'
copera rows delete <row-id> --board <board-id> --table <table-id> --force
--query searches the visible, non-password columns of the table.
Descriptions and rich-text cells
Rows have two separate long-text surfaces:
- Fixed legacy row description — shown by
rows getasDescription (legacy). Userows descriptionto read it. Updating it is no longer supported by the CLI. - RICH TEXT / DESCRIPTION table column cells — modern long-text columns. A table can have several, so target one with
--column <column-id>.
# Read the legacy row description
copera rows description <row-id> --board <board-id> --table <table-id>
# Read a RICH TEXT / DESCRIPTION column cell
copera rows column-content <row-id> --board <board-id> --table <table-id> \
--column <column-id>
# Write a RICH TEXT / DESCRIPTION column cell
copera rows update-column-content <row-id> --board <board-id> --table <table-id> \
--column <column-id> --content "# Notes"
update-column-content supports --operation replace (default), append, or prepend. To find a column ID for a table column named Description, run copera tables get <table-id> --board <board-id> --json.
Comments
copera rows comment <row-id> --board <board-id> --table <table-id> \
--content "Looks good"
copera rows comments <row-id> --board <board-id> --table <table-id>
Attachments
Download attachments from FILE columns or from comments:
# From a FILE column
copera rows attachments download <row-id> --board <board-id> --table <table-id> \
--column <column-id> --file <file-id> -o ./contract.pdf
# From a comment
copera rows comments attachments download <row-id> --board <board-id> --table <table-id> \
--comment <comment-id> --file <file-id> -o ./contract.pdf
Authenticate a row
Verify an identifier/password pair against the matching columns of a row (for example, a credentials table):
copera rows authenticate --board <board-id> --table <table-id> \
--identifier-column <column-id> --identifier-value "[email protected]" \
--password-column <column-id> --password-value "secret"
Stdin support
rows create, rows comment, and rows update-column-content read from stdin when their content flag is omitted:
echo '{"columns":[{"columnId":"<column-id>","value":"Hello"}]}' \
| copera rows create --board <board-id> --table <table-id>
echo "Looks good" \
| copera rows comment <row-id> --board <board-id> --table <table-id>
echo "# Notes" \
| copera rows update-column-content <row-id> --board <board-id> --table <table-id> \
--column <column-id>
Docs
Docs commands require a Personal Access Token (cp_pat_...).
copera docs tree
copera docs tree --parent <doc-id> # subtree under a doc
copera docs search "keyword"
copera docs get <doc-id> # metadata
copera docs content <doc-id> # body as Markdown
copera docs content <doc-id> --no-cache # bypass the local cache
copera docs create --title "New Doc" --content "Initial content"
copera docs update <doc-id> --content "Replacement content"
copera docs update <doc-id> --operation append --content "More content"
copera docs metadata <doc-id> --title "New title"
copera docs delete <doc-id> --force
docs update --operation accepts replace (default), append, or prepend. Content updates are processed asynchronously — the API accepts the request and applies it shortly after. docs create and docs update both read from stdin when --content is omitted:
cat ./notes.md | copera docs create --title "Q2 Strategy"
cat ./report.md | copera docs update <doc-id>
Drive
Drive commands require a Personal Access Token with drive access.
copera drive tree
copera drive tree --parent <folder-id> # subtree under a folder
copera drive tree --depth 5 # control nesting depth (1-10, default 3)
copera drive search "quarterly report"
copera drive get <file-id>
copera drive download <file-id> -o report.pdf
copera drive upload ./report.pdf --parent <folder-id>
copera drive upload ./project/ --parent <folder-id> # recursive directory upload
copera drive mkdir "New Folder"
copera drive mkdir "Sub Folder" --parent <folder-id>
Uploads support multipart transfer, recursive directory upload (matching folder structure is created automatically), and a progress bar in interactive terminals. Tune them with --chunk-size <bytes> (default 10 MB) and --concurrency <n> (default 4). download writes to the current directory unless you pass -o/--dest.
Channels
copera channels list
copera channels list --query "deploy" # name, description, or participant
copera channels list --type <type> # filter by channel type
copera channels list --kind dm --participant <user-id>
copera channels message send "Hello" --channel <channel-id>
copera channels message send "Hello" --user <user-id> # DM by user ID
echo "Deploy done" | copera channels message send --channel <channel-id>
channels list --kind accepts group or dm. To send a direct message, use channels message send with --user <user-id> instead of --channel — Copera reuses the existing DM channel when one exists. Messages support Markdown (headings, bold/italic, lists, code blocks, blockquotes, links):
copera channels message send "## Build Report
* **Status:** Success
* **Duration:** 3m 42s
> All tests passed." --channel <channel-id>
Workspace
copera workspace info # workspace metadata
copera workspace members # members of the workspace
copera workspace teams # teams in the workspace
These require a Personal Access Token.
Search
Search across resource types. --type is repeatable to narrow the results:
copera search "contract"
copera search "contract" --type document --type driveContent
Requires a Personal Access Token.
Notifications
copera notifications list
copera notifications read <notification-id>
copera notifications unread <notification-id>
copera notifications delete <notification-id> --force
Requires a Personal Access Token.
Cache
The CLI caches document content locally for faster reads.
copera cache status # size, file count, and cache path
copera cache clean # clear the cache
Use copera docs content <id> --no-cache to bypass the cache for a single read without clearing it.
Utilities
copera version
copera version --json
copera update # update to the latest version
copera update --version 1.2.0 # pin to a specific version
copera update --force # skip the confirmation prompt
copera completion bash
copera completion zsh
copera completion fish
Pipe completion output into your shell startup file to enable tab completion:
copera completion zsh >> ~/.zshrc # zsh
copera completion bash >> ~/.bashrc # bash
copera completion fish > ~/.config/fish/completions/copera.fish # fish
Restart your shell or run source ~/.zshrc (or equivalent) to activate.
Related
- Authentication — token types and login flows.
- Configuration — profiles, default IDs, and environment variables.
- Public API Reference — the REST endpoints behind every command.