CLI Commands Reference
Global flagsThese flags can be used with any
tier0 command.--jsonOutput raw JSON--debugPrint HTTP request/response detailsBasic operations
tier0 doctorDiagnose local Tier0 CLI connectivity and auth
Usage
tier0 doctorNotes
- Checks local configuration, OpenAPI connectivity, API key presence, and API key identity.
Example
tier0 doctortier0 configView or update configuration
Usage
tier0 configFlags
--base-url- Set the platform base URL
--api-key- Set the API key (alternative to tier0 login)
--lang- Deprecated compatibility flag; CLI output is English-only
Examples
tier0 configtier0 config --base-url https://tier0.devtier0 config --api-key sk-per-xxxxxxtier0 loginAuthenticate via Device Flow
Usage
tier0 loginFlags
--no-wait- Print the authorization URL and exit without polling
--setup-code- Poll for an existing setup code instead of creating a new one
--base-url- Override the platform base URL
Notes
- Without
--no-wait, the CLI polls every 5 seconds for up to 10 minutes. - With
--no-wait--json, the CLI returnsverification_url,setup_code, andexpires_in.
Examples
tier0 logintier0 login --no-wait --jsontier0 login --setup-code <setup_code>tier0 apiCall an API endpoint directly
Usage
tier0 api <endpoint>Flags
--body- Request body JSON string
--body-file- Read request body from file
--method- HTTP method (GET|POST|PUT|DELETE)
--dry-run- Preview the request without executing it
Notes
--bodyand--body-fileare mutually exclusive.
Examples
tier0 api /openapi/v1/uns/browse --body '{"path":"/"}'tier0 api /openapi/v1/uns/read --body '{"topics":["demo"]}'tier0 api /openapi/v1/uns/write --body-file body.jsontier0 upgradeUpgrade CLI to the latest version
Usage
tier0 upgradeFlags
--dry-run- Check for updates without installing
-v, --version- Upgrade to a specific version (default: latest)
Examples
tier0 upgradetier0 upgrade --dry-runtier0 uninstallUninstall tier0 CLI
Usage
tier0 uninstallFlags
--purge- Also delete config file (credentials)
--remove-skills- Also remove the Tier0 Skill from detected AI agents
--keep-skills- Keep agent skills (deprecated; this is now the default)
Notes
- Agent Skills and config are kept by default.
- The local bundled skills directory is removed during CLI uninstall.
Examples
tier0 uninstalltier0 uninstall --purgetier0 uninstall --remove-skillstier0 uninstall --purge --remove-skillstier0 versionShow version
Usage
tier0 versionExample
tier0 versionSkills
tier0 skills installInstall or repair the Skill embedded in this CLI
Usage
tier0 skills installFlags
--force- Replace the active Skill with the embedded baseline
--no-sync- Install locally without syncing detected AI agents
Examples
tier0 skills installtier0 skills install --forcetier0 skills listList installed skillsalias: ls
Usage
tier0 skills listExample
tier0 skills listtier0 skills updateUpgrade skills to the latest versionalias: upgrade
Usage
tier0 skills updateFlags
--dry-run- Check for updates without installing
Examples
tier0 skills updatetier0 skills update --dry-runtier0 skills versionShow skills version infoalias: ver
Usage
tier0 skills versionExample
tier0 skills versiontier0 skills statusShow active and embedded Skill status
Usage
tier0 skills statusExample
tier0 skills statustier0 skills syncSync the active Skill to detected AI agents
Usage
tier0 skills syncExample
tier0 skills syncAuth
tier0 auth whoamiShow current API key identity
Usage
tier0 auth whoamiNotes
- Shows user, workspace, key name, key type, roles, and permissions.
Examples
tier0 auth whoamitier0 auth whoami --jsonUNS
tier0 uns browseBrowse UNS namespace tree
Usage
tier0 uns browseFlags
-p, --path- Path to browse in the UNS tree
-d, --max-depth- Max recursion depth (0 = unlimited)
--include-metadata- Include node metadata
--include-leaf-value- Include leaf node values
Examples
tier0 uns browsetier0 uns browse --path /devicestier0 uns browse --path / --max-depth 2tier0 uns searchSearch UNS topics
Usage
tier0 uns searchFlags
-k, --keyword- Search by name keyword
--path-prefix- Filter by path prefix
--topic-type- Filter by topic type
--page- Page number
-l, --size- Page size (max results)
--include-metadata- Include node metadata
--include-leaf-value- Include leaf node values
Examples
tier0 uns search --keyword temptier0 uns search --path-prefix /devices --size 50tier0 uns search --keyword temp --include-metadatatier0 uns readRead current value of UNS topics
Usage
tier0 uns read [topic...]tier0 uns read --topic <topic>Flags
-t, --topic- Topic name(s) to read (repeatable; positional args are also accepted)
--include-metadata- Include topic metadata (topicType, fields, description)
--include-leaf-value- Include leaf node values
Notes
- At least one topic is required via positional args or
--topic.
Examples
tier0 uns read demotier0 uns read --topic demotier0 uns read temp humiditytier0 uns read --topic sensor1 --include-metadatatier0 uns writeWrite value to a UNS topic
Usage
tier0 uns writeFlags
-t, --topic- Topic name to write to (required)
-v, --value- JSON value string (mutually exclusive with --file)
-f, --file- Read value from file (mutually exclusive with --value)
--qos- MQTT QoS level (0/1/2)
--retain- Set MQTT retain flag
--dry-run- Preview the request without executing it
Notes
--valueand--fileare mutually exclusive.- The value must be a valid JSON object matching the topic fields.
Examples
tier0 uns write --topic demo --value '{"temp":25}'tier0 uns write --topic demo --file payload.jsontier0 uns write --topic sensor1 --value '{"on":true}' --qos 1 --retaintier0 uns historyQuery historical data for topics
Usage
tier0 uns historyFlags
-t, --topic- Topic name(s) (repeatable, required)
--start- Start time: relative (-1h/-30m/-7d), ISO 8601, or 'now' (required)
--end- End time: relative, ISO 8601, or 'now' (default: now)
--page- Page number
-l, --size- Page size (max data points)
--interval- Aggregation interval (e.g. 1m, 1h, 1d)
--fn- Aggregation function (avg/max/min/sum/count)
--field- Aggregation field name
Examples
tier0 uns history -t demo --start -1htier0 uns history -t demo --start -24h --end now --fn avg --interval 1htier0 uns history -t demo --start 2026-01-01T00:00:00Z --end 2026-01-02T00:00:00Ztier0 uns createCreate UNS namespace nodes
Usage
tier0 uns createFlags
-t, --topic- Topic path or leaf name (required if not using --file)
--parent- Parent path prefix (optional, combined with --topic)
--type- Node type: 'path' (folder) or 'topic' (data point)
-d, --display-name- Display name
--description- Description
--alias- Alias
-f, --file- Read namespace definition from JSON file ({"namespace":[]} or bare array)
--topic-type- Deprecated: topic type is now derived from the path (Metric/Action/State folder before leaf)
--fields- Schema fields JSON array
--fields-file- Read schema fields JSON array from file
--dry-run- Preview the request without executing it
Notes
- When not using
--file,--topicand--typeare required. --fieldsand--fields-fileare mutually exclusive.- For topic nodes, the segment immediately before the leaf must be Metric, Action, or State.
Examples
tier0 uns create --topic Plant/Line1/Metric/Temperature --type topictier0 uns create --parent Factory1/Line1/Station1 --topic Metric/ProductionCount --type topictier0 uns create --topic Plant/Line1 --type path --display-name 'Line 1'tier0 uns create --file namespace.jsontier0 uns updateUpdate UNS topic metadata
Usage
tier0 uns updateFlags
-p, --path- Topic path to update (required)
-n, --name- New name
--alias- New alias
--description- New description
--clear-description- Clear the description without relying on an empty shell argument
-d, --display-name- New display name
--extend-properties- Extended properties JSON object
--fields- Schema fields JSON array
--fields-file- Read schema fields JSON array from file
--update-mask- Fields to update (repeatable, e.g. name,description,fields)
--dry-run- Preview the request without executing it
Notes
--descriptionand--clear-descriptionare mutually exclusive.--fieldsand--fields-fileare mutually exclusive.- At least one field to update is required.
Examples
tier0 uns update --path Plant/Line1/Metric/Temperature --display-name 'Line 1 Temp'tier0 uns update --path Plant/Line1 --description 'Production line 1' --update-mask descriptiontier0 uns update --path Plant/Line1/Metric/Temperature --fields '[{"name":"temp","type":"float","unit":"C"}]' --update-mask fieldstier0 uns deleteDelete UNS node(s)
Usage
tier0 uns deleteFlags
-p, --path- Node path(s) to delete (repeatable, required)
--hard- Hard delete (irreversible)
-y, --yes- Confirm high-risk operation (required)
--dry-run- Preview the request without executing it
Notes
- Soft delete is the default and can be restored.
--hardis irreversible.- High-risk execution requires
--yesunless using--dry-run.
Examples
tier0 uns delete --path factory/line1/sensor/temp --yestier0 uns delete --path factory/line1/sensor/temp --path factory/line1/sensor/humi --yestier0 uns delete --path factory/line1/sensor/temp --hard --yestier0 uns restoreRestore topic from history
Usage
tier0 uns restoreFlags
-p, --path- Topic path to restore (required)
-y, --yes- Confirm high-risk operation (required)
--dry-run- Preview the request without executing it
Notes
- High-risk execution requires
--yesunless using--dry-run.
Example
tier0 uns restore --path Plant/Line1/Metric/Temperature --yesNode-RED Flow
tier0 flow listList flowsalias: ls
Usage
tier0 flow listFlags
-k, --keyword- Filter by name keyword
-t, --type- Filter by type (SourceFlow/EventFlow)
--source- Show SourceFlow only
--event- Show EventFlow only
Notes
--sourceand--eventare mutually exclusive.--typecannot be combined with--sourceor--event.
Examples
tier0 flow listtier0 flow list --source --jsontier0 flow getGet flow details
Usage
tier0 flow get --id <id>tier0 flow get <id>Flags
--id- Flow ID
Notes
- A positive Flow ID is required via
--idor as a positional argument.
Examples
tier0 flow get --id 1 --jsontier0 flow get 1 --jsontier0 flow createCreate a new flow
Usage
tier0 flow createFlags
-n, --name- Flow name (required)
-t, --type- Flow type: SourceFlow | EventFlow (required)
--source- Set type to SourceFlow
--event- Set type to EventFlow
--desc- Description
--template- Initial template JSON string
--template-file- Read initial template from file
--dry-run- Preview the request without executing it
Notes
- Use exactly one of
--type,--source, or--eventto select a Flow type. --templateand--template-fileare mutually exclusive.
Examples
tier0 flow create --name "modbus-collector" --source --desc "Modbus TCP collector"tier0 flow create --name "alert-handler" --event --desc "Temperature alarm processor"tier0 flow updateUpdate flow metadata
Usage
tier0 flow update --id <id>tier0 flow update <id>Flags
--id- Flow ID (required)
-n, --name- New name
--desc- New description
--template- New template JSON string
--template-file- Read new template from file
--favorite- Mark as favorite
--unfavorite- Remove from favorites
--dry-run- Preview the request without executing it
Notes
- A positive Flow ID is required via
--idor as a positional argument. --templateand--template-fileare mutually exclusive.--favoriteand--unfavoriteare mutually exclusive.- At least one field to update is required.
Examples
tier0 flow update --id 1 --name "line1-collector"tier0 flow update --id 1 --favoritetier0 flow dataGet Node-RED canvas JSON
Usage
tier0 flow data --id <id>tier0 flow data <id>Flags
--id- Flow ID
-o, --out- Save output to file
Notes
- A positive Flow ID is required via
--idor as a positional argument.
Example
tier0 flow data --id 1 --out flows.jsontier0 flow deployDeploy Node-RED canvas JSON
Usage
tier0 flow deploy --id <id>tier0 flow deploy <id>Flags
--id- Flow ID (required)
--flows-json- Node-RED canvas JSON string
-f, --flows-file- Read Node-RED canvas JSON from file (recommended)
-y, --yes- Confirm high-risk operation (required)
--dry-run- Preview the request without executing it
Notes
- A positive Flow ID is required via
--idor as a positional argument. --flows-jsonand--flows-fileare mutually exclusive.- Deployment replaces all existing Node-RED nodes in the Flow.
- High-risk execution requires
--yesunless using--dry-run.
Examples
tier0 flow deploy --id 1 -f flows.json --dry-run --jsontier0 flow deploy --id 1 -f flows.json --yestier0 flow deleteDelete flow(s)alias: del, rm
Usage
tier0 flow delete --id <id>tier0 flow delete <id>[,<id>...]Flags
--id- Flow ID(s) to delete (repeatable)
-y, --yes- Confirm high-risk operation (required)
--dry-run- Preview the request without executing it
Notes
- Positional arguments may contain comma-separated Flow IDs.
- Deletion stops the Node-RED container(s) and cannot be undone.
- High-risk execution requires
--yesunless using--dry-run.
Example
tier0 flow delete --id 1 --yestier0 flow nodesList available Node-RED node types
Usage
tier0 flow nodes [source|event]tier0 flow nodes --type <SourceFlow|EventFlow>tier0 flow nodes --sourcetier0 flow nodes --eventFlags
-t, --type- Flow type (SourceFlow/EventFlow)
--source- Show SourceFlow nodes
--event- Show EventFlow nodes
Notes
- Accepts at most one positional Flow type.
--sourceand--eventare mutually exclusive.- Do not combine positional/type input with
--sourceor--event.
Examples
tier0 flow nodes source --jsontier0 flow nodes --source --jsontier0 flow nodes --event --jsonAssets
tier0 assets uploadUpload a file to Tier0 object storage
Usage
tier0 assets upload <local-file>Flags
--business- Business scene
--use-by- Usage scope: user|workspace|platform
--visibility- Visibility: public|private
--app-instance-id- AI app instance ID
--session-id- AI session ID
--multipart-size- Multipart part size (e.g. 10MB, min 5MB)
--concurrency- Multipart upload concurrency (number of parallel parts)
--resume- Resume an interrupted multipart upload
--abort- Abort an interrupted multipart upload and clean up its state
Notes
- Exactly one local file argument is required.
- Files larger than 100MB automatically use multipart upload.
- The CLI does not enforce a hard maximum file size; the server applies plan/quota limits.
Examples
tier0 assets upload ./report.csvtier0 assets upload ./report.csv --visibility public --business attachmenttier0 assets upload ./report.csv --use-by workspace --visibility privatetier0 assets upload ./large-backup.tar.gztier0 assets upload ./large-backup.tar.gz --resumetier0 assets upload ./large-backup.tar.gz --aborttier0 assets upload ./large-backup.tar.gz --multipart-size 20MB --concurrency 8tier0 assets downloadDownload a file from Tier0 object storage
Usage
tier0 assets downloadFlags
--file-path- File path returned by upload
-o, --output- Output file path (default: stdout)
--content-disposition- Custom Content-Disposition
Examples
tier0 assets download --file-path workspace/.../report.csv -o ./report.csvtier0 assets download --file-path workspace/.../report.csvtier0 assets urlGet file access URL from Tier0 object storage
Usage
tier0 assets urlFlags
--file-path- File path returned by upload
--expired-sec- Presigned URL expiration seconds
--content-disposition- Custom Content-Disposition
Examples
tier0 assets url --file-path workspace/.../report.csvtier0 assets url --file-path workspace/.../report.csv --expired-sec 300tier0 assets deleteDelete a file from Tier0 object storage
Usage
tier0 assets deleteFlags
--file-path- File path returned by upload
-y, --yes- Confirm high-risk operation (required)
--dry-run- Preview the request without executing it
Notes
- Deletion cannot be undone.
- High-risk execution requires
--yesunless using--dry-run.
Examples
tier0 assets delete --file-path workspace/.../report.csv --dry-run --jsontier0 assets delete --file-path workspace/.../report.csv --yesNo matching CLI commands.