Skip to content

Developer API and CLI

Workstation exposes the same CRM contract through the public REST API and a JSON CLI. They share scopes, validation, pagination, visibility, and audit behavior.

Use browser login for a person working in the CLI. Use a Developer App key for CI, unattended automation, and direct REST API clients.

Terminal window
curl -fsSL https://workstation.repzo.com/install-cli | bash
repzo setup agents
repzo auth login --profile work --base-url 'https://your-workstation.example'

On Windows PowerShell, install with irm https://workstation.repzo.com/install-cli.ps1 | iex before running the same repzo setup and login commands.

The installer downloads a standalone binary and verifies its SHA-256 checksum. When cosign is available, it also verifies the release’s Sigstore signature. Node and npm are not required. Manual downloads are available from the public Repzo CLI releases.

The CLI opens Workstation in your default browser. Sign in if needed, choose the access to grant, and approve the request. The CLI listens only on an ephemeral 127.0.0.1 callback, validates the response with OAuth state and PKCE, then stores a short-lived access token and rotating refresh token in macOS Keychain when available (or a private mode-0600 file).

Delegated CLI access always keeps the signed-in user’s current role and record visibility. Removing the user, disabling their account, or reducing their permissions takes effect on later API calls. Run repzo auth logout --profile work to revoke the server-side CLI session and delete its local credentials.

Run repzo upgrade to preview an available standalone release and repzo upgrade --yes to install it. The upgrade verifies the release checksum, checks the staged executable’s version, and rolls back if the installed binary cannot be confirmed.

  1. Open Settings → Integrations & Developers → Developer Apps.
  2. Create an API Key app.
  3. Grant only the read or write scopes the integration needs.
  4. Copy the foxa-* token when it is shown. Workstation stores only its hash and cannot show the plaintext again.

Keep the token in an environment variable or secret store. Do not commit it or place it directly in a command.

Standard CRUD is available for contacts, accounts, deals, activities, campaigns, projects, tickets, invoices, carts, orders, line items, price offers, products, pipelines, saved reports, appointments, requests, request types, tags, forms, segments, content collections, and articles. Contacts carry the pipeline, stage, status, source, and channel fields used for lead-management workflows. Pipeline stages are nested under /pipelines/{id}/stages.

Operational routes cover:

  • report categories, filter values, and aggregate execution;
  • outbound event subscriptions, scoped to the calling Developer App;
  • inbox queues, conversations, messages, replies, notes, assignment, close/reopen, and snooze;
  • visible chat channels plus message read/write;
  • voice call history, call channels, analytics, and deprecated geo-locked click-to-call;
  • Send campaign lookup, transactional/system dispatch, event ingest, and subscription opt-out.
  • request submission, approval, and rejection;
  • entity tags and supported activity/email associations;
  • form and article publishing plus segment evaluation;
  • import job status and scheduled CSV/XLSX exports.

Import uploads stay in the Workstation interface because they require file upload, preview, and column mapping. The public API can inspect those jobs and create exports without accepting internal media IDs.

Authentication/password flows, billing administration, connector secrets, support impersonation, destructive workspace maintenance, and private AI traces are intentionally not part of v1.

REST requests use the /api/v1 base path:

Terminal window
curl 'https://your-workstation.example/api/v1/contacts?page=1&limit=20' \
-H 'Authorization: Bearer foxa-your-key'

Install the standalone CLI and create a named profile:

Terminal window
curl -fsSL https://workstation.repzo.com/install-cli | bash
repzo setup agents
repzo auth login --profile work --base-url 'https://your-workstation.example'
repzo profiles use work
repzo doctor

For CI or another non-browser environment, pipe a Developer App key through stdin:

Terminal window
printf '%s' "$REPZO_DEVELOPER_APP_TOKEN" | repzo auth login --profile ci --token-stdin

REPZO_TOKEN and REPZO_BASE_URL can still override a profile for an ephemeral process.

Domain commands produce JSON and call the same routes:

Terminal window
repzo contacts list --query '[email protected]' --limit 20
repzo tickets create --data @ticket.json --dry-run
repzo inbox conversations reply CONVERSATION_ID --data @reply.json --dry-run
repzo chat send CHANNEL_ID --data '{"body":"Hello","bodyFormat":"plain"}' --dry-run
repzo contacts list --all

Every mutation requires --yes; use --dry-run first. The CLI retries temporary 429, 502, 503, and 504 responses, and --all follows both offset and cursor pagination.

Successful commands return a stable envelope that agents can chain:

{
"ok": true,
"data": [{ "id": "contact-id", "firstName": "Maya" }],
"summary": "1 result",
"breadcrumbs": [
{
"action": "get",
"cmd": "repzo contacts get contact-id",
"description": "Get Maya"
}
],
"meta": {
"page": 1,
"command": "repzo contacts list"
}
}

Pass --quiet for raw data in shell scripts. Pass --agent for raw, non-interactive agent output; --agent --help still returns focused command discovery. Errors are structured on stderr with a stable error.code, an actionable hint, and a retryable flag.

Exit Error code Meaning
1 usage Invalid command, flag, or local input
2 not_found Profile or API resource not found
3 auth Missing or invalid authentication
4 forbidden Missing access or API scope
5 rate_limit Retry limit reached
6 network API could not be reached
7 api Validation or server failure
8 ambiguous A more specific target is required

For agent discovery and setup:

Terminal window
repzo commands --json
repzo inbox conversations --agent --help
repzo setup agents
repzo setup codex
repzo setup claude

repzo setup agents installs the bundled skill under ~/.agents/skills/repzo-workstation and links every detected Codex or Claude installation to that shared copy. Use a specific setup command to connect one agent explicitly. Start a new agent thread after setup. Installed skills refresh automatically on the first CLI command after a CLI version upgrade, and repzo doctor verifies their paths and versions.

Use repzo openapi or open /api/v1/docs for the exact fields and filters. Generate shell completion with repzo completion zsh, bash, or fish. Inputs are strict; unknown fields and filters return 422.

  • Start with read scopes and add write scopes only when needed.
  • Read a record and its metadata before updating it.
  • Use ISO-2 country codes and stable custom property names.
  • A 403 usually means the Developer App lacks the required scope.
  • A 422 means the request does not match the public contract; inspect its error details instead of guessing fields.
  • A 429 means the public API rate limit was reached; honor the retry window.

See Settings for the rest of the workspace configuration surface.