Command structure
Every CLI invocation follows the same shape:
Reading a synopsis
Every synopsis in this documentation uses the same notation.
Groups and actions
Commands are grouped by the resource they act on, and each command calls one Deel API operation: adjustments create --invoice calls POST /adjustments/invoice, and jobs status --job_id <id> calls GET /jobs/{job_id}. Batch commands carry a -bulk suffix, for example adjustments create-bulk.
Three groups are utilities rather than resources: auth manages the token, job polls one or more jobs by id, and jobs lists and retrieves jobs with pagination.
Variants
Some actions expose several operations under the same name. adjustments create can create an invoice adjustment or a payroll adjustment, which are distinct API operations with different request bodies. A variant flag selects the operation:
Exactly one variant flag is required. Running the action without one, or with more than one, exits with a usage.variant error. Requesting --help without a variant prints the available variants and their operations:
Help at every level
Each level of --help reveals more of the command’s contract:
Action-level help prints what generic usage output cannot: the request body fields, which are passed through --input rather than as flags, and the fields of the response data.
Machine-readable contracts
Adding --json to an action-level --help prints the contract as a JSON document: the usage line, the path and query parameters, the request body kind and fields (including nested objects), the multipart file fields, and the response fields. AI agents and tools consume this instead of scraping the human help, which is why the agent instruction block tells an agent to run it before every new command.
The body.kind value tells the caller how to construct --input:
Request body skeletons
--generate-input prints a JSON skeleton of the request body with every field present and typed placeholder values, then exits without calling the API or requiring a token. Redirect it to a file, edit the values, and pass the file back with --input. Agents use the same skeleton to build bodies without guessing field names.
For array bodies the skeleton contains one example item. For operations that also require file uploads, the required --file flags are printed on stderr so that stdout remains valid JSON.
Version
Prints deel <version>. The CLI also sends its version to the API in the x-deel-cli-version request header.