Navigation

CLI

CLI commands

Reference for every Bannerify CLI command, option, and exit code.

The Bannerify CLI has three commands: config, create, and whoami.

bannerify <command> [options]

Run bannerify --help, or bannerify <command> --help, to print the options of a command in your terminal.

Global flags

Flag Description
-v, --version Print the CLI version
-h, --help Print help. Works on every subcommand

config

Manage the settings the CLI keeps between runs. The commands work like git config.

Command Description
bannerify config set <key> [value] Set a value. Without value, the CLI prompts for it
bannerify config get <key> Print one value
bannerify config list Print all values
bannerify config delete <key> Remove a value

Keys

Key Description
apiKey The API key the CLI sends to the API
baseUrl The API base URL. Defaults to https://api.bannerify.co/v1
defaultFormat The image format used when --format is absent. Defaults to png
outputDir The directory that holds the output file when --out is absent

The apiKey value is masked in the output of get and list. Add --show to reveal it:

bannerify config get apiKey --show

config set apiKey prompts for the key without echoing it. Add --show to the prompt when you paste a long key and want to see it:

bannerify config set apiKey
bannerify config set baseUrl https://api.bannerify.co/v1
bannerify config set defaultFormat webp
bannerify config set outputDir ./renders
bannerify config delete defaultFormat

The config file lives at $XDG_CONFIG_HOME/bannerify/config.json, or ~/.config/bannerify/config.json. The CLI creates it with 0600 permissions.

create

Generate an image or a PDF from a template.

bannerify create image <templateId> [options]
bannerify create pdf <templateId> [options]

Options

Option Description
-o, --out <path> Output file path. Use --out=- to write the file bytes to stdout
--format <png|jpeg|webp|svg> Image format. Image only. Defaults to png, or to defaultFormat
--modifications '<json>' JSON array of layer modifications
--modifications-file <path> Read the modifications array from a JSON file. Use - for stdin
--api-key <key> Override the configured API key
--base-url <url> Override the API base URL
--json Print a machine-readable result on stdout
-q, --quiet Suppress messages that are not errors

Without --out, the CLI writes the file to <templateId>.<format> in the current directory, or in outputDir when you set it.

Modifications

--modifications takes the same array as the modifications field of the REST API. Each entry names a layer with name and sets its value.

bannerify create image tpl_xxxxx -o out.png \
  --modifications '[{"name":"title","text":"Hello world"}]'

For a long array, keep it in a file and pass the path, or pipe it through stdin:

bannerify create image tpl_xxxxx -o out.png --modifications-file ./data.json
echo '[{"name":"title","text":"From stdin"}]' | \
  bannerify create image tpl_xxxxx --modifications-file - -o out.png

The layer names come from the template editor. See Template elements for the field each layer type accepts.

Examples

# WebP output with one text override
bannerify create image tpl_xxxxx --format webp -o out.webp \
  --modifications '[{"name":"title","text":"Summer sale"}]'

# A PDF with the same layers
bannerify create pdf tpl_invoice -o invoice.pdf \
  --modifications '[{"name":"total","text":"$29.00"}]'

# Image bytes on stdout, for the next command in the pipeline
bannerify create image tpl_xxxxx --out=- --quiet > out.png

whoami

Verify the API key and print the project it belongs to.

bannerify whoami
Authenticated as Acme
  project id: prj_xxxxx
  created:    2026-01-14T09:12:31.000Z
  key source: config

key source reports where the key came from: flag, env, or config. Use it to check which key a script uses.

Run whoami first in a new environment. It reports an authentication problem before a long batch fails.

Use it from a script or an agent

The CLI detects a non-interactive session. When stdin or stdout is not a terminal, or when CI is set, it never prompts: a missing key fails at once with the commands to fix it.

Behaviour Detail
Prompting Only in an interactive terminal
stdout Data only: the file bytes, or the JSON result with --json
stderr Messages, progress, and errors
Key source --api-key, then BANNERIFY_API_KEY, then the config file

JSON output

Add --json to read the result from a script. On success, create prints one object:

{
  "ok": true,
  "command": "create image",
  "templateId": "tpl_xxxxx",
  "format": "png",
  "path": "/home/dev/out.png",
  "bytes": 80734
}

create pdf omits format. whoami prints the project and the key source:

{
  "ok": true,
  "project": {
    "id": "prj_xxxxx",
    "name": "Acme",
    "createdAt": "2026-01-14T09:12:31.000Z"
  },
  "keySource": "config"
}

On an error, the command prints the error object from the API and exits with a non-zero code:

{
  "ok": false,
  "error": {
    "code": "NOT_FOUND",
    "message": "template tpl_xxxxx not found",
    "docs": "https://bannerify.co/docs/api-reference/errors/code/NOT_FOUND"
  }
}

When --out=- is used with --json, the file bytes stay on stdout. Send the file to a target that accepts a stream, or write to a path instead.

Exit codes

Code Meaning
0 The command succeeded
1 A general error, for example a missing template or a failed request
2 An authentication error: the key is missing, invalid, or not permitted
if ! bannerify create image tpl_xxxxx -o out.png --quiet; then
  echo "generation failed with code $?"
fi

Troubleshoot

Symptom Cause Fix
No API key found The session is not interactive and no key is set Set BANNERIFY_API_KEY, or run bannerify config set apiKey in a terminal
Exit code 2 The key is invalid, or the project lost access Run bannerify whoami, then create a new key in API keys
Exit code 1 with NOT_FOUND The template id does not exist in the project Copy the id from the template list in the dashboard
Exit code 1 with BAD_REQUEST A modification names a layer that the template does not have Check the layer names in the template editor
Empty output file --out=- sent the bytes to stdout Redirect stdout to a file: --out=- > out.png

Learn more