Syncro - Printing Press CLI
Prerequisites: Install the CLI
This skill drives the syncro-cli binary. You must verify the CLI is installed before invoking any command from this skill. If it is missing, install it first:
- macOS / Linux:
bash <(curl -fsSL https://raw.githubusercontent.com/Servosity/msp-skills/main/skills/syncro/install.sh) - Windows (PowerShell):
iwr -useb https://raw.githubusercontent.com/Servosity/msp-skills/main/skills/syncro/install.ps1 | iex - Verify:
syncro-cli --version - Ensure
~/.local/bin(macOS / Linux) or%LOCALAPPDATA%\Programs\msp-skills(Windows) is on$PATH.
The installer downloads the syncro-cli and syncro-mcp binaries into ~/.local/bin
(macOS / Linux) or %LOCALAPPDATA%\Programs\msp-skills (Windows). It does not
register the skill with your agent and writes no MCP client config - see
mcp-install.md for that wire-up.
If --version reports "command not found" after install, the runtime cannot see the binary directory on $PATH. Do not proceed with skill commands until verification succeeds.
syncro-cli mirrors your Syncro tenant into a local SQLite store so tickets, customers, assets, invoices, and RMM alerts become joinable, searchable, and fast. On top of full API coverage it adds reports Syncro never rendered: uninvoiced time, invoice drift, AR aging, customer profitability, SLA aging triage, and fleet-wide patch gaps. Built for agents with --json, --select, --dry-run, typed exit codes, and adaptive backoff for Syncro's 180-requests-per-minute limit. The cross-entity reports read the local store, so run sync first; some (uninvoiced, drift, margin, patch-gaps, aging) also need sub-resources like timer entries, patches, and comments to be synced.
When to Use This CLI
Choose syncro-cli when an agent or technician needs to query, report on, or update a Syncro tenant from the command line. It is the right tool for cross-entity questions (uninvoiced time, AR aging, patch gaps, alert noise) that Syncro's UI and single-call API cannot answer, and for scripted bulk operations that would otherwise hit the rate limit.
Unique Capabilities
These capabilities aren't available in any other tool for this API.
Money you are leaving on the table
billing uninvoiced- Find logged-but-unbilled labor across every customer so no billable time slips.Reach for this to recover revenue: it surfaces money the MSP already earned but never billed.
syncro-cli billing uninvoiced --agentbilling drift- Surface tickets closed long ago that have logged time but were never invoiced.Use after a billing run to catch revenue that silently slips once a ticket closes.
syncro-cli billing drift --closed-before 14d --agentbilling ar-aging- Bucket unpaid invoices into 0-30/30-60/60-90/90+ day aging tiers.The canonical owner finance question - pick this to see what cash is aging out.
syncro-cli billing ar-aging --agent
Owner analytics
customers margin- Compare logged labor against invoiced revenue per customer over a window.Use to find which customers actually make money before renewal conversations.
syncro-cli customers margin --window 90d --agentcustomers profile- One-shot cross-entity customer snapshot: open tickets, assets, AR balance, contracts, and latest RMM alerts in a single card.Reach for this when you need full customer context (health, money, risk) before drafting a reply, renewal, or escalation.
syncro-cli customers profile 12345 --agent
Triage that compounds
tickets aging- List open tickets past SLA with no comment in the last N hours.The daily triage ritual - pick this first thing to find tickets going stale.
syncro-cli tickets aging --no-comment 48h --agentsnapshot diff- Diff two retained local sync snapshots across all entities.Use to answer what changed across assets and tickets between two syncs.
syncro-cli snapshot diff --since 7d --agent
Fleet visibility
assets patch-gaps- Rank assets missing critical patches across every customer.Reach for this for fleet-wide patch posture without N throttled API calls.
syncro-cli assets patch-gaps --severity critical --agentalerts noise- Rank customers by RMM alert volume over a time window.Use to find the noisy customer draining tech time before it burns out the team.
syncro-cli alerts noise --window 30d --agentalerts orphans- Surface RMM alerts that never became a ticket within a window.Pick this to catch silent failures and pure noise that slipped past dispatch.
syncro-cli alerts orphans --window 7d --agent
Command Reference
appointment-types - Manage appointment types
syncro-cli appointment-types create- Required permission: Global Adminsyncro-cli appointment-types delete- Required permission: Global Adminsyncro-cli appointment-types get- Retrieves an Appointment Type by IDsyncro-cli appointment-types list- Returns a paginated list of Appointment Typessyncro-cli appointment-types update- Updates an existing Appointment Type by ID
appointments - Manage appointments
syncro-cli appointments create- No special permissions required.syncro-cli appointments delete- No special permissions required.syncro-cli appointments get- No special permissions required.syncro-cli appointments list- Required permission: Appointments - View All (see-own never restricted)syncro-cli appointments update- Updates an existing Appointment by ID
callerid - Manage callerid
syncro-cli callerid- Get Caller ID
canned-responses - Manage canned responses
syncro-cli canned-responses create- Required permission: Ticket Canned Responses - Managesyncro-cli canned-responses delete- Required permission: Ticket Canned Responses - Managesyncro-cli canned-responses list- Required permission: Ticket Canned Responses - Managesyncro-cli canned-responses list-cannedresponses- Required permission: Ticket Canned Responses - Manage Single-Customer Users can only access own canned responses.syncro-cli canned-responses update- Required permission: Ticket Canned Responses - Manage
contacts - Manage contacts
syncro-cli contacts create- Required permission: Customers - Edit Single-Customer Users can only access own contacts.syncro-cli contacts delete- Required permission: Customers - Edit Single-Customer Users can only access own contacts.syncro-cli contacts get- Required permission: Customers - View Detail Single-Customer Users can only access own contacts.syncro-cli contacts list- Required permission: Customers - View Detail Single-Customer Users can only access own contacts.syncro-cli contacts update- Required permission: Customers - Edit Single-Customer Users can only access own contacts.
contracts - Manage contracts
syncro-cli contracts create- Required permission: Contracts - Editsyncro-cli contracts delete- Required permission: Contracts - Deletesyncro-cli contracts get- Required permission: Contracts - Editsyncro-cli contracts list- Required permission: Contracts - List/Searchsyncro-cli contracts update- Required permission: Contracts - Edit
customer-assets - Manage customer assets
syncro-cli customer-assets create- Required permission: Assets - Create Single-Customer Users can only access own assets.syncro-cli customer-assets get- Required permission: Assets - View Details Single-Customer Users can only access own assets.syncro-cli customer-assets list- Required permission: Assets - List/Search Single-Customer Users can only access own assets.syncro-cli customer-assets list-customerassets- Required permission: Assets - Assets - List/Search.syncro-cli customer-assets update- Required permission: Assets - Edit Updating only policy_folder_id requires Assets - Policy Change.
customers - Manage customers
syncro-cli customers create- Required permission: Customers - Createsyncro-cli customers delete- Required permission: Customers - Deletesyncro-cli customers get- Required permission: Customers - View Detail Single-Customer Users can only access own customer (self).syncro-cli customers list- Required permission: Customers - List/Search Single-Customer Users can only access own customer (self).syncro-cli customers list-autocomplete- Returns a paginated list of customers for autocomplete querysyncro-cli customers list-latest- Required permission: Customers - Edit Single-Customer Users can only access own customer (self).syncro-cli customers update- Required permission: Customers - Edit Single-Customer Users can only access own customer (self).
estimates - Manage estimates
syncro-cli estimates create- Required permission: Estimates - Createsyncro-cli estimates delete- Required permission: Estimates - Deletesyncro-cli estimates get- Required permission: Estimates - View Detailssyncro-cli estimates list- Required permission: Estimates - List/Searchsyncro-cli estimates update- Required permission: Estimates - Edit
invoices - Manage invoices
syncro-cli invoices create- Required permission: Invoices - Createsyncro-cli invoices delete- Returns 200 even if the delete failssyncro-cli invoices get- Required permission: Invoices - View Detailssyncro-cli invoices list- Required permission: Invoices - List/Searchsyncro-cli invoices update- This updates an existing Invoice, all parameters overwrite existing params
items - Manage items
syncro-cli items- Required permission: Parts Orders - List/Search
leads - Manage leads
syncro-cli leads create- Required permission: Nonesyncro-cli leads get- Required permission: Leads - List/Searchsyncro-cli leads list- Required permission: Leads - List/Searchsyncro-cli leads update- Updates an existing Lead by ID
line-items - Manage line items
syncro-cli line-items- Returns a paginated list of Line Items
me - Manage me
syncro-cli me- Returns the current user
new-ticket-forms - Manage new ticket forms
syncro-cli new-ticket-forms get- Required permission: Tickets - Createsyncro-cli new-ticket-forms list- Required permission: Ticket Workflows - Manage
otp-login - Manage otp login
syncro-cli otp-login- Authorize a User with One Time Password
payment-methods - Manage payment methods
syncro-cli payment-methods- All Users except Single Customer Users may use this action.
payments - Manage payments
syncro-cli payments create- Required permission: Payments - Createsyncro-cli payments get- Required permission: Payments - View Listsyncro-cli payments list- Required permission: Payments - View List
policy-folders - Manage policy folders
syncro-cli policy-folders create- Required permission: Policies - Create Syncro accounts only.syncro-cli policy-folders delete- Required permission: Policies - Delete Syncro accounts only.syncro-cli policy-folders get- Required permission: Policies - List/Search Syncro accounts only.syncro-cli policy-folders list- Required permission: Policies - List/Search Syncro accounts only.syncro-cli policy-folders update- Required permission: Policies - Edit Syncro accounts only.
portal-users - Manage portal users
syncro-cli portal-users create- Required permission: Global Adminsyncro-cli portal-users create-portalusers- Creates an Invitation for a Portal Usersyncro-cli portal-users delete- Required permission: Global Adminsyncro-cli portal-users list- Returns a paginated list of Portal Userssyncro-cli portal-users update- Updates an existing Portal User by ID
products - Manage products
syncro-cli products create- Required permission: Products - Createsyncro-cli products get- Required permission: Products - List/Searchsyncro-cli products list- Required permission: Products - List/Searchsyncro-cli products list-barcode- Required permission: Products - List/Searchsyncro-cli products list-categories- Returns a paginated list of Product Categoriessyncro-cli products update- Required permission: Products - Edit
purchase-orders - Manage purchase orders
syncro-cli purchase-orders create- Required permission: Purchase Orders - Editsyncro-cli purchase-orders get- Required permission: Purchase Orders - View Detailssyncro-cli purchase-orders list- Required permission: Purchase Orders - List/Search
remote_search - Manage remote search
syncro-cli remote-search- Additional permissions required depending on search results type: - Customer, Contact, Asset
rmm-alerts - Manage rmm alerts
syncro-cli rmm-alerts create- Required permission: RMM Alerts - Create Single-Customer Users can only access own RMM Alerts.syncro-cli rmm-alerts delete- Required permission: RMM Alerts - Delete Single-Customer Users can only access own RMM Alerts.syncro-cli rmm-alerts get- Required permission: RMM Alerts - List Single-Customer Users can only access own RMM Alerts.syncro-cli rmm-alerts list- Required permission: RMM Alerts - List Single-Customer Users can only access own RMM Alerts.
schedules - Manage schedules
syncro-cli schedules create- Required permission: Recurring Invoices - Newsyncro-cli schedules delete- Required permission: Recurring Invoices - Deletesyncro-cli schedules get- Required permission: Recurring Invoices - Listsyncro-cli schedules list- Required permission: Recurring Invoices - Listsyncro-cli schedules update- Required permission: Recurring Invoices - Edit
settings - Manage settings
syncro-cli settings list- Returns a list of Account Settingssyncro-cli settings list-printing- Returns Printing Settingssyncro-cli settings list-tabs- Returns Tabs Settings
ticket-blueprints - Manage ticket blueprints
syncro-cli ticket-blueprints- Required permission
ticket-comments - Manage ticket comments
syncro-cli ticket-comments- Required permissions: 'Tickets - View Details' or 'Tickets - View 'Their Ticket' Details (assigned to them)
ticket-timers - Manage ticket timers
syncro-cli ticket-timers list- Required permission: Ticket Timers - Overviewsyncro-cli ticket-timers update- Update the billable property of a Ticket Timer
tickets - Manage tickets
syncro-cli tickets create- Required permission: Tickets - Create Single-Customer Users can only access own tickets.syncro-cli tickets delete- Required permission: Tickets - Delete Single-Customer Users can only access own tickets.syncro-cli tickets get- Required permissions: 'Tickets - View Details' or 'Tickets - View 'Their Ticket' Details (assigned to them)syncro-cli tickets list- Required permission: Tickets - List/Search Single-Customer Users can only access own tickets.syncro-cli tickets list-settings- Returns Tickets Settingssyncro-cli tickets update- Required permission: Tickets - Edit Single-Customer Users can only access own tickets.
timelogs - Manage timelogs
syncro-cli timelogs list- Users with permission 'Timelogs - Manage' may see timelogs for any/all users. Otherwise, results scoped to current user.syncro-cli timelogs list-last- Users with permission 'Timelogs - Manage' may see timelogs for any/all users. Otherwise, results scoped to current user.syncro-cli timelogs update- Users with permission 'Timelogs - Manage' may see timelogs for any/all users. Otherwise, results scoped to current user.
user-devices - Manage user devices
syncro-cli user-devices create- Creates a User Devicesyncro-cli user-devices get- Retrieves an existing User Device by UUIDsyncro-cli user-devices update- Updates an existing User Device by UUID
users - Manage users
syncro-cli users get- Retrieves an existing User by IDsyncro-cli users list- Returns a paginated list of Users
vendors - Manage vendors
syncro-cli vendors create- Required permission: Vendors - Newsyncro-cli vendors get- Required permission: Vendors - View Detailssyncro-cli vendors list- Required permission: Vendors - Listsyncro-cli vendors update- Updates an existing Vendor page by ID
wiki-pages - Manage wiki pages
syncro-cli wiki-pages create- Required permission: Documentation - Createsyncro-cli wiki-pages delete- Required permission: Documentation - Deletesyncro-cli wiki-pages get- Required permission: Documentation - Allow Usagesyncro-cli wiki-pages list- Required permission: Documentation - Allow Usagesyncro-cli wiki-pages update- Required permission: Documentation - Edit
Finding the right command
When you know what you want to do but not which command does it, ask the CLI directly:
syncro-cli which "<capability in your own words>"
which resolves a natural-language capability query to the best matching command from this CLI's curated feature index. Exit code 0 means at least one match; exit code 2 means no confident match - fall back to --help or use a narrower query.
Recipes
Recover unbilled labor
syncro-cli billing uninvoiced --agent
Lists logged time with no linked invoice grouped by customer (fields: customer_name, uninvoiced_hours, uninvoiced_entries).
Morning ticket triage
syncro-cli tickets aging --no-comment 24h --json
Open tickets with no comment in 24h, ready to assign or escalate.
Fleet patch posture
syncro-cli assets patch-gaps --severity critical --agent --select customer_name,asset_name,missing_patches
Cross-customer view of assets with missing/pending patches (fields: customer_name, asset_name, missing_patches).
Find the noisy customer
syncro-cli alerts noise --window 30d --json
Ranks customers by RMM alert volume over the last month to spot draining accounts.
Safe customer update
syncro-cli customers update 123 --business-name "Acme LLC" --dry-run
Previews a sparse update that sends only the changed field; use --dry-run to confirm the body before committing.
Auth Setup
Set SYNCRO_SUBDOMAIN to your account subdomain and SYNCRO_API_KEY to a token created under Admin > API > API Tokens (Custom Permissions). The CLI sends it as an Authorization: Bearer header; if a tenant rejects that, Syncro also accepts the token as an api_key query parameter.
Run syncro-cli doctor to verify setup.
Agent Mode
Add --agent to any command. Expands to: --json --compact --no-input --no-color --yes.
Pipeable - JSON on stdout, errors on stderr
Filterable -
--selectkeeps a subset of fields. Dotted paths descend into nested structures; arrays traverse element-wise. Critical for keeping context small on verbose APIs:syncro-cli appointment-types list --agent --select id,name,statusPreviewable -
--dry-runshows the request without sendingOffline-friendly - sync/search commands can use the local SQLite store when available
Non-interactive - never prompts, every input is a flag
Explicit retries - use
--idempotentonly when an already-existing create should count as success, and--ignore-missingonly when a missing delete target should count as success
Response envelope
Commands that read from the local store or the API wrap output in a provenance envelope:
{
"meta": {"source": "live" | "local", "synced_at": "...", "reason": "..."},
"results": <data>
}
Parse .results for data and .meta.source to know whether it's live or local. A human-readable N results (live) summary is printed to stderr only when stdout is a terminal AND no machine-format flag (--json, --csv, --compact, --quiet, --plain, --select) is set - piped/agent consumers and explicit-format runs get pure JSON on stdout.
Agent Feedback
When you (or the agent) notice something off about this CLI, record it:
syncro-cli feedback "the --since flag is inclusive but docs say exclusive"
syncro-cli feedback --stdin < notes.txt
syncro-cli feedback list --json --limit 10
Entries are stored locally at ~/.local/share/syncro-cli/feedback.jsonl. They are never POSTed unless SYNCRO_FEEDBACK_ENDPOINT is set AND either --send is passed or SYNCRO_FEEDBACK_AUTO_SEND=true. Default behavior is local-only.
Write what surprised you, not a bug report. Short, specific, one line: that is the part that compounds.
Output Delivery
Every command accepts --deliver <sink>. The output goes to the named sink in addition to (or instead of) stdout, so agents can route command results without hand-piping. Three sinks are supported:
| Sink | Effect |
|---|---|
stdout |
Default; write to stdout only |
file:<path> |
Atomically write output to <path> (tmp + rename) |
webhook:<url> |
POST the output body to the URL (application/json or application/x-ndjson when --compact) |
Unknown schemes are refused with a structured error naming the supported set. Webhook failures return non-zero and log the URL + HTTP status on stderr.
Named Profiles
A profile is a saved set of flag values, reused across invocations. Use it when a scheduled agent calls the same command every run with the same configuration - HeyGen's "Beacon" pattern.
syncro-cli profile save briefing --json
syncro-cli --profile briefing appointment-types list
syncro-cli profile list --json
syncro-cli profile show briefing
syncro-cli profile delete briefing --yes
Explicit flags always win over profile values; profile values win over defaults. agent-context lists all available profiles under available_profiles so introspecting agents discover them at runtime.
Exit Codes
| Code | Meaning |
|---|---|
| 0 | Success |
| 2 | Usage error (wrong arguments) |
| 3 | Resource not found |
| 4 | Authentication required |
| 5 | API error (upstream issue) |
| 7 | Rate limited (wait and retry) |
| 10 | Config error |
Argument Parsing
Parse $ARGUMENTS:
- Empty,
help, or--help→ showsyncro-cli --helpoutput - Starts with
install→ ends withmcp→ MCP installation; otherwise → see Prerequisites above - Anything else → Direct Use (execute as CLI command with
--agent)
MCP Server Installation
- Install the MCP binary (run the install script from the Prerequisites section, or see mcp-install.md for per-agent wire-up).
- Register with Claude Code:
claude mcp add syncro-mcp -- syncro-mcp - Verify:
claude mcp list
Direct Use
- Check if installed:
which syncro-cliIf not found, offer to install (see Prerequisites at the top of this skill). - Match the user query to the best command from the Unique Capabilities and Command Reference above.
- Execute with the
--agentflag:syncro-cli <command> [subcommand] [args] --agent - If ambiguous, drill into subcommand help:
syncro-cli <command> --help.