Skip to content

Export

Bulk export with auto-pagination (unified or proxy):

# Unified: path contains /
truto export crm/contacts -a <account-id> -o ndjson --out contacts.ndjson
truto export crm/contacts -a <account-id> -o csv --out contacts.csv
 
# Proxy: no slash in path
truto export tickets -a <account-id> -o csv --out tickets.csv
 
# Pipe to jq
truto export crm/contacts -a <account-id> -o ndjson | jq '.email'
Format Behavior
ndjson Streams one record per line — best for large datasets
csv Header from first page; columns locked from first record
json / yaml Buffers all pages in memory — avoid for huge exports

export defaults to json output; most other commands default to table.

Diff

Compare two records field-by-field:

truto diff crm/contacts <id1> <id2> -a <account-id>
truto diff crm/contacts <id> -a <account-1> --account2 <account-2>   # cross-account
truto diff crm/contacts <id1> <id2> -a <account-id> -o json

Resource path convention matches export: crm/contacts → unified; tickets → proxy.

With --account2, [id2] is optional and defaults to id1.

JSONata

Evaluate Truto JSONata locally (no API call):

truto jsonata eval --expression '$map(items, function($v) { $v.id })' --input context.json
cat context.json | truto jsonata eval --expression-file expr.txt --stdin

Uses @truto/truto-jsonata with Truto's custom functions, in the CLI's own bounded worker. The CLI and the Truto runtime use different engine versions, so a local result does not prove production behavior.

  • A runaway expression is stopped and the command exits 1. If the evaluator cannot start, nothing is evaluated and the command exits 1.
  • Functions that call external services ($generateEmbeddingsCohere, $parseDocument, $convertMdToPdf, $getArrayBuffer, $getDataUri, $teeStream) are not called.
  • Instead, they return the placeholder "[not run: external function $<name>]" with a warning on stderr; the command still exits 0. Check stderr before trusting the value.
  • A URL or date-time result prints as its JSON form (the href, or an ISO string).

Open dashboard

truto open
truto open integrations
truto open accounts <id>
truto open tenants                 # tenants page
truto open tenants acme-corp       # specific tenant detail
truto open sync-jobs
truto open logs
Resource With no ID With an ID
integrations, unified-models List page That catalog page
environment-integrations, accounts (or integrated-accounts), sync-jobs, tenants List page That record's page
webhooks, api-tokens, datastores, logs, team, notifications List page List page, with a warning
environments, workflows, mcp-tokens, link-tokens Refused — no dashboard page Refused

Any other name is appended to https://app.truto.one/ as path segments. A segment that reads as . or .. is refused, since it would name another page.

Uses open on macOS, xdg-open on Linux, and the system default browser on Windows.

Stdin piping

# Bulk admin create from NDJSON
cat contacts.ndjson | truto accounts create --stdin
 
# Bulk admin create from JSON array
echo '[{"name":"a"},{"name":"b"}]' | truto integrations create --stdin
 
# Data plane (single JSON body)
echo '{"first_name":"Jane"}' | truto unified crm contacts -m create -a <id> --stdin
cat batch.json | truto batch --stdin

Upgrade

truto upgrade --check
truto upgrade --force

See Installation.