Command line
Install the Jsonify CLI, sign in with a workspace key, and run pipelines, watch runs, export datasets and ask Jason for work from a terminal or a job.
The Jsonify CLI is a single command, jsonify, that talks to one workspace over HTTPS with a key you create in Jsonify. It is built for people at a terminal and for automation and AI agents alike: every command prints one JSON object, errors go to stderr as JSON, and exit codes are stable.
- Platform
- macOS (Windows is coming soon)
- Needs
- Nothing to install first; the installer checks your Mac
- Access
- Read, or Operator
- Output
- JSON; JSON Lines for watch commands
- Create a keyIntegrations, Jsonify CLI
- Installone command
- Sign injsonify auth login
- Usepipelines, runs, datasets, Jason
Create a key
A CLI key is an integration. Each key belongs to one workspace and has one access level, and you can have as many as you need.
- Add integration and choose Jsonify CLI under Developer. The dialog is titled Connect Jsonify CLI.
- Label it. Name the person or agent that will use it, for example “Acme data agent”. Use separate integrations when people or agents need separate keys.
- Choose the access. Read or Operator, described below.
- Create key. The next screen, Jsonify CLI is ready, shows the key once, followed by the three commands to install, sign in and verify.
- Copy the key now. Jsonify does not show it again. If it is lost, rotate the credential from the integration’s detail page.
| Option | Values | Default | What it does |
|---|---|---|---|
| Label | Text | “Jsonify CLI” | How the integration appears on the Integrations page, and the name shown as the author of any chat this key starts |
| Access | Read / Operator | Read | What the key may do |
Read or Operator
| Access | What the key can do |
|---|---|
| Read | Inspect workspace context, pipelines, versions and runs; search; read usage; read, query and export dataset rows; read Jason chats and their events |
| Operator | Everything in Read, plus start and cancel runs, rerun rows, change schedules, fetch caching and automatic repair, and start, message, stop or archive Jason chats |
No key can edit, approve or activate a pipeline version directly. Changes go through Jason’s normal build, review and activation, which an Operator key can request and follow.
Give a key the least access that does the job. A reporting job needs Read; an agent that runs pipelines needs Operator. Keys never expire on their own; they stop working when rotated, revoked, when the integration is deleted, or when the person who created them leaves the organisation.
Install
Run the installer shown on the setup screen:
curl -fsSL https://factory.jsonify.com/cli/install.sh | sh
It verifies the download’s checksum and installs ~/.local/bin/jsonify. It does not use sudo and does not edit your shell profile; if ~/.local/bin is not on your PATH, it prints the line to add. Then:
jsonify --version
The CLI keeps itself current: when a newer release is available it updates itself once in the background, and jsonify --update checks and updates on demand.
Sign in
Use the second command from the setup screen. --profile names this workspace on your machine; use the workspace’s name or slug.
jsonify auth login --profile acme --api-url https://factory.jsonify.com
It asks for the key and does not echo it. To supply the key from automation without putting it in shell history:
printf '%s' "$JSONIFY_KEY" | jsonify auth login --profile acme --api-url https://factory.jsonify.com --stdin
Confirm the workspace and access level:
jsonify context
Profiles
One profile per workspace. The profile you signed in with last is the default.
| Command | What it does |
|---|---|
jsonify auth list |
Lists profiles and marks the default |
jsonify auth default --profile NAME |
Makes a profile the default |
jsonify auth status --profile NAME |
Checks one profile’s key still works |
jsonify auth logout --profile NAME |
Removes a profile |
jsonify --profile NAME <command> |
Uses a profile for one command |
For a one-off job, environment variables override stored profiles and are never saved: JSONIFY_API_KEY and JSONIFY_API_URL.
Treat the key like a password. Do not pass it as a command argument, commit it, paste it into an agent’s instructions, or log it.
Output
| Exit status | Meaning |
|---|---|
0 |
Success |
2 |
Local usage, configuration or file problem |
3 |
Sign-in or permission failure |
4 |
Jsonify rejected the request |
5 |
Network or server failure |
6 |
A watched run failed or was cancelled |
Command reference
Every command has --help with the exact options installed on your machine. This table is the map.
Workspace
| Command | What it does |
|---|---|
jsonify context |
The workspace, access level, billing allowance and rows remaining |
jsonify search "text" |
Finds pipelines, datasets, runs and chats by name. Add --dataset-rows to also search inside dataset values (three characters or more) |
jsonify usage [--days N] [--pipeline ID] |
Rows used and remaining, and run activity for the period |
jsonify ask "task" [--context pipeline:ID] [--attach FILE] [--notify EMAIL] [--wait] |
Sends Jason a task, optionally attached to a pipeline, dataset or workspace, and optionally waits for the reply. Operator |
Pipelines
| Command | What it does |
|---|---|
jsonify pipelines list [--limit N] |
Pipelines with status, version and schedule |
jsonify pipelines get ID [--version N] [--full-inputs] |
One pipeline: what it collects, parameters, inputs, outputs |
jsonify pipelines inspect ID |
The same plus the latest run, per-output counts and a failure summary |
jsonify pipelines versions ID |
The version history with changelogs |
jsonify pipelines run ID [--version N] [--row-limit N \| --uncapped] [--param k=v] [--input NAME=DATASET@VERSION/TABLE] [--idempotency-key KEY] [--wait] |
Starts a run. Operator |
jsonify pipelines schedule ID hourly\|daily\|weekly\|off [--time HH:MM] [--day mon] [--timezone TZ] |
Sets the schedule. Operator |
jsonify pipelines cache ID <duration\|off\|default> |
Sets how long fetched pages may be reused, for example 12h or 30d. Operator |
jsonify pipelines auto-heal ID on\|off |
Turns automatic repair of failed scheduled and webhook runs on or off. Operator |
jsonify pipelines build "brief" [--notify EMAIL] |
Asks Jason to build a new pipeline. Operator |
jsonify pipelines change ID "request" [--notify EMAIL] [--wait] |
Asks Jason to change a pipeline; --wait follows it through review and activation. Operator |
Pipeline identifiers accept the short identifier, the identifier with its slug, or the full Jsonify URL.
Runs
| Command | What it does |
|---|---|
jsonify runs list [--status …] [--limit N] |
Recent runs, newest first |
jsonify runs get RUN [--samples] [--source-breakdown] |
One run: status, timing, outputs and counts. --samples adds five rows per output |
jsonify runs watch RUN |
Follows a run as JSON Lines until it finishes. Exit 6 on failure |
jsonify runs failures RUN |
A summary of the failed and held rows and their reasons |
jsonify runs activity RUN [--kind event\|log\|fetch\|provenance] [--limit N] |
The run’s activity feed |
jsonify runs logs RUN [--source …] [--level …] [--cursor …] |
The run’s logs, filtered and paged |
jsonify runs steps RUN |
Each step with its status and row counts |
jsonify runs step-data RUN STEP [--offset] [--limit] [--column C] |
Rows a completed step produced |
jsonify runs output RUN --output NAME [--offset] [--limit] |
A page of one published output |
jsonify runs export RUN --output NAME --out FILE [--max-rows N] [--column C] |
Writes one output as JSON Lines; 10,000 rows by default |
jsonify runs provenance RUN --row-id ID |
Where one row came from: step, fetch, source page |
jsonify runs cost RUN |
What the run used |
jsonify runs cache RUN |
How much the run reused from cache versus fetched live |
jsonify runs lineage RUN |
The chat, candidate, review and version behind the run |
jsonify runs cancel RUN |
Stops an active run. Operator |
jsonify runs rerun-rows RUN --input-name N --output O --row-id ID… [--idempotency-key K] |
Re-collects up to 100 exact rows. Operator |
Datasets
| Command | What it does |
|---|---|
jsonify datasets list |
Datasets with row counts and versions |
jsonify datasets get ID |
One dataset: worksheets, columns, versions |
jsonify datasets rows ID [--version N] [--table T] [--offset] [--limit] [--column C] |
A page of rows from one version |
jsonify datasets query --dataset ALIAS=ID[@VERSION][/TABLE]… --sql "…" [--max-rows N] |
Read-only SQL across up to 20 datasets, 500 rows |
jsonify datasets export ID [--version N] [--table T] --format json\|csv\|xlsx --out FILE |
Writes one version to a file. A workbook always holds every worksheet |
Deliverables
| Command | What it does |
|---|---|
jsonify deliverables list |
Files a pipeline produced, latest version of each |
jsonify deliverables history ID |
Every version of one file |
jsonify deliverables fetch VERSION_ID --out FILE |
Downloads one exact version |
jsonify deliverables delete ID |
Removes the series. Operator |
Jason
| Command | What it does |
|---|---|
jsonify jason list |
Chats in the workspace |
jsonify jason new "text" [--attach FILE] [--notify EMAIL] |
Starts a chat. Operator |
jsonify jason get SESSION |
A chat’s state |
jsonify jason events SESSION [--after N] |
What has happened in a chat, from an event number |
jsonify jason send SESSION "text" [--notify EMAIL] |
Sends a message to a chat. Operator |
jsonify jason watch SESSION [--after N] |
Follows a chat as JSON Lines. --after 0 replays from the start |
jsonify jason stop SESSION |
Stops the running turn. Operator |
jsonify jason archive SESSION |
Archives the chat. Operator |
--notify EMAIL on any command that starts a Jason turn sends one email when that turn finishes; Jsonify creates the email channel for you. Chats started from the CLI appear in the workspace’s chat history with a green CLI badge and the integration’s label as the author.
Global options
--version, --guide (the built-in agent guide, offline), --docs (the full reference from your Jsonify origin), --update, --pretty, --compact, --color, --profile NAME. Put them before the command.
Typical flows
Run a pipeline and wait
jsonify pipelines run marketpipe03 --row-limit 500 --param region=uk --idempotency-key nightly-2026-09-15 --wait
--wait follows the run and exits 0 when it completes or 6 when it fails, so a job can branch on it. The idempotency key makes retries safe: repeating the same command with the same key returns the same run instead of starting another. --param values that are valid JSON keep their type (true, 12, "pt").
Watch a run started elsewhere
jsonify runs watch mrun00000361
One compact JSON line each time the run’s state or evidence changes, a heartbeat line about every thirty seconds, then exit. Reconnects after a dropped connection do not repeat lines you already have.
Export a dataset
jsonify datasets export marketdata02 --format csv --table main --out ./price-observations.csv
jsonify datasets export marketdata02 --version 61 --format xlsx --out ./price-observations-v61.xlsx
Exports are rendered on the server and downloaded whole; the CLI refuses to overwrite an existing file unless you add --force. To export the rows a particular run produced, before or after it publishes, use runs export.
Ask a question of the data
jsonify datasets query \
--dataset offers=marketdata01 \
--dataset obs=marketdata02@61 \
--sql 'SELECT o.retailer, count(*) AS drops FROM obs JOIN offers o ON o.product_url = obs.product_url WHERE obs.change < 0 GROUP BY o.retailer ORDER BY drops DESC' \
--max-rows 50
Ask Jason and wait for the answer
jsonify ask "Why did last night's price promotion run publish 30% fewer rows than usual?" \
--context pipeline:marketpipe03 --wait
jsonify pipelines change marketpipe03 "Add the promotion end date as its own column" --notify you@example.com --wait
The second command follows the change through Jason’s build, the reviewer’s verdict and activation, and finishes with the new version number.
Rotate or revoke a key
Open the CLI integration from the Integrations page. Its Settings tab shows the credential: its identifier, access, who created it, when it was created, rotated and last used.
Pointing an AI agent at the CLI
The CLI ships with an operating guide written for agents. It explains the output contract, the exit codes, how to wait for a run or a chat without polling, how to retry safely, and what the CLI deliberately will not do. Have the agent read it before it runs anything else:
jsonify --guide
The same text is on the integration’s Overview tab as Guide for AI agents, with Copy guide so you can paste it into the instructions file of the project the agent works in, and Full reference for the complete command reference. Give the agent its own key with its own label; every chat it starts is then attributed to it in the chat history, and revoking it never affects a person’s key.
An agent given an Operator key and the guide can carry a whole change on its own: ask Jason for the change with
pipelines change --wait, run the activated version withpipelines run --wait, and export the result withruns export. Every step is a normal Jsonify action you can see in the browser.
Troubleshooting
| Symptom | What to do |
|---|---|
jsonify: command not found |
Add ~/.local/bin to PATH as the installer said, then open a new shell |
| The installer says the runtime on the Mac is too old | Update macOS (or its developer tools) and run the installer again |
| “Credential permissions are rejected” | The CLI refuses a loosely permissioned credentials folder. Restore 0700 on ~/.config/jsonify and 0600 on the file inside it, with no symlinks |
“The key is invalid or revoked” (exit 3) |
Check the integration in Jsonify. Rotate if the key was lost, then jsonify auth login again |
| A command needs Operator access | Rotate the integration to Operator, or create a separate Operator integration |
| The installer says “Windows is coming soon.” | The first release is macOS only |
Every request carries a request_id; include it from the error JSON when you contact support.