Output and filtering
Successful commands print a JSON envelope to stdout. Errors go to stderr as a separate JSON document, so stdout can be piped safely. See Errors and exit codes for the error shape.
The response envelope
The envelope carries two keys:
Utility commands such as deel auth status use the same envelope with their own data shape.
Output flags
Combine these flags to shape what a command prints:
--jq takes precedence over --fields. --quiet applies after --fields.
Field projection
jq transforms
--jq receives the value of data and prints every result the filter produces as its own JSON document. The envelope is not printed.
Filters that produce objects print pretty-printed JSON:
Identifiers only
--quiet prints only the ids a command produced, which is the form to feed into the next command in a script.
Interactive and non-interactive output
The CLI always prints JSON when stdout is not a terminal, so pipes and redirects receive a stable format regardless of flags. On an interactive terminal, --no-json prints the data value alone, without the meta block.
A terminal counts as interactive only when stdout is a TTY, CI is not exactly true, and none of CLAUDE_CODE, CURSOR, or CODEX is present. Those three are presence checks, so CLAUDE_CODE=0 still counts as an agent environment. Inside CI runners and coding agents such as Claude Code, Cursor, and Codex, output is therefore JSON even when a pseudo-terminal is attached. See AI agents and the CLI.
Diagnostics with --debug
--debug writes request diagnostics to stderr without changing stdout: the method, URL, and status of each request, the request id, and the idempotency key with an indication of whether it was derived or overridden.