Skip to main content
ht is the operational CLI for the Hellotracks public API. It is designed for dispatch operators, platform teams, CI jobs, and automation workflows.

Global Flags

  • --profile <name> selects a local profile.
  • --api-url <url> overrides the public API base URL.
  • --api-key-stdin reads the API key from stdin. --api-key <key> works too but shows the key in shell history and process lists; prefer stdin or HELLOTRACKS_API_KEY_FILE.
  • --json is short for --output json.
  • --output pretty|table|json|yaml|csv|ndjson selects output format.
  • --fields <a,b,c> projects array output to specific fields.
  • --sort <field> sorts array output; prefix with - for descending.
  • --request-id <id> sends an X-Request-ID header.
  • --confirm-profile <name> fails unless the selected profile matches.
  • --yes skips destructive confirmations.
  • --no-input disables prompts.
  • --quiet hides notices on stderr. --verbose logs each HTTP request on stderr (never the key) and adds read-only details to human output.
  • --no-update-check skips the daily check for a newer release.
Date options accept YYYY-MM-DD, today, yesterday, and tomorrow, as your computer’s local day. Files for import and sync need YYYY-MM-DD.

Output, Errors, And Exit Codes

Without --json or --output, output is meant for people and may change between releases. --json and --output json|yaml|ndjson|csv print the public API objects unchanged. With --json (or --output json|yaml|ndjson) errors are one JSON line on stderr. Mistyped commands and options are the exception: they print the usual plain-text usage error and exit 1.
Reads (GET) are retried a few times on timeouts, 429 with Retry-After, and 5xx before ht gives up; writes are never retried, so a failed write may or may not have happened. Check before repeating it.

Sign Up And Sign In Without A Key

These four calls are the only ones without an API key (POST /signup, /signup/verify, /auth/email-code, /auth/email-code/verify). The code goes to the email, works for 30 minutes and 5 tries, and the API key it gives works for 90 days. Only company admins get a key by email code; auth login --email answers the same for any address, so it can’t be used to find out who has an account. The API limits sign-ups and code requests per address and per network, and refuses throwaway inboxes.

Public API Resources

  • ht signup (create a company; --code finishes it)
  • ht auth login|logout|whoami|validate (login --email signs in with an emailed code)
  • ht company show|update
  • ht members list|get|locate|create|update|delete|columns|template|import|export|sync (list --query searches)
  • ht places list|get|create|update|delete|columns|template|import|export|sync
  • ht jobs list|get|create|update|archive|restore|delete|columns|template|import|export|sync (list --all reads every page)
  • ht routing optimize
  • ht reports catalog|preview|run|status|saved and the classic types|describe|columns|generate|jobs|history|recurring
  • ht timesheets list|summary|add|update|delete|export|columns|template
  • ht forms templates|submissions|links|attachments|builder|report
  • ht alerts actions|zones|configs|recent|instances|report
  • ht maps layers|inspect|export|open|share|viewer|shares
  • ht eta create|list|get|update|refresh|events|snippet|revoke
  • ht webhooks list|set
  • ht apikeys list|create|revoke|delete
  • ht profiles list|create|use|doctor
  • ht skills install, ht update, ht commands (every command; --json adds arguments and options)

Bulk Commands

Bulk commands accept JSON arrays, { "items": [...] }, NDJSON, CSV, and YAML.
import creates records. sync creates or updates records using a stable key. Defaults are externalId for jobs, name for places, and username for members. A sync compares against every job and place, not only the first page. Jobs are written 50 per request (--batch-size); a batch the API refuses is written again one by one, so the report names each bad row. Members and places are written one at a time. A run stops at the first failed record unless --continue-on-error is given. Either way the report’s summary counts what was created, updated, and failed, and the run exits 7 when anything failed. CSV cells are text. Columns typed number or integer in ht <resource> columns are sent as numbers; everything else, date included, is sent as written. On a sync, extendedData.* columns change only those custom fields of a place; an empty column leaves the field as it is. CSV headers use public API field names. Nested fields use dot notation, for example contact.name, location.lat, timeWindow.start, and extendedData.customerId.

Member Location

Use locate when you need the latest known GPS payload without the full member profile.
Default output is a compact table with id, name, latitude, longitude, updated time, speed, accuracy, and tracking state. --full adds GPS-style fields such as raw ts, altitude, heading, sensor, username, and member status. JSON/YAML output returns the full location, normalized GPS fields, states, and timestamps objects.

Reports

The reports from the dashboard’s Reports page run in the background. ht reports run starts a run, waits, and downloads the files; their links are signed and work for 30 days without an API key.
Periods are today, yesterday, thisWeek, lastWeek, thisMonth, lastMonth, last7Days, and last30Days, or --from and --until. Without --member or --team a report covers everyone. Saved reports keep a report by name, and can send it on a schedule:

Classic Reports

The classic report types still work, and are the only way to the places, members, gpx, activities, and timeline reports. Use their discovery before generating files:
Generate report files with explicit selectors:
--background makes the file on the server without the two-minute request limit and waits for it. Manage recurring report schedules:

Timesheets

ht timesheets manages raw clock-in/clock-out entries. For official PDF/XLSX timesheet files, keep using ht reports generate timesheet.
Use ht timesheets columns to see export columns and ht timesheets template for a CSV starter. Member selectors accept member id, username, email, or exact name. list output includes the entryId used by update and delete; raw API objects remain available with --json or --output yaml.

Forms

ht forms manages form templates, submission data, attachments, and job/place links. The canonical authoring format is JSON or YAML using Hellotracks FormContent. Template workflow:
Submission workflow:
Attachments and links:
Use ht forms report <template-id> --from ... --until ... --format csv|xlsx --file ... as a convenience wrapper around ht reports generate formsubmissions. The focused ht forms builder command is a line-oriented draft editor; use file-based commands for CI and agent automation.

Alerts

ht alerts manages alert rule configs and triggered alert instances. Use ht webhooks for alert-triggered webhook delivery; alert commands do not configure webhooks. Discover supported triggers and zone ids before creating configs:
Create and maintain alert configs:
Inspect triggered alerts and export history:
Selectors accept repeated --member, --place, and --zone values. Members resolve by id, username, email, or exact name; places and zones resolve by id or exact title/name. Raw API objects remain available with --json or --output yaml.

ETA Pages

ht eta creates public, no-login arrival pages at https://eta.page/... for Hellotracks jobs. The CLI does not send SMS or WhatsApp; use snippets, CRM fields, portals, email, or an existing messaging provider to distribute the link. ETA Email Notifications are configured in Hellotracks Job Settings; when those emails include {etaPageUrl}, Hellotracks can create the ETA Page automatically as the email is sent.
Omit visibility flags on create to use company ETA Page defaults. Use --show-worker-name, --hide-worker-name, --show-map, and --hide-map to override visibility for a specific page. Default output is compact for operators; use --json or --output yaml for raw API objects.

Maps

ht maps creates operational map snapshots. Share links are expiring backend-stored snapshots; exported GeoJSON files are durable local archives that can be opened later in the hosted viewer.
viewer opens https://live.hellotracks.com/share/maps/viewer; the browser reads a dropped or selected .geojson file locally and does not upload it. Use trips as the public CLI name for trip history.