{
  "schema_version": "cmdhub.website.command_catalog.v1",
  "tool": "hubspot",
  "title": "Hubspot CLI",
  "description": "Hubspot resources through the cmdhub CLI.",
  "auth_mode": "oauth",
  "auth_scopes": {},
  "markdown_url": "/cli/hubspot/index.md",
  "commands": [
    {
      "id": "cmd-hubspot-association",
      "path": "hubspot association",
      "name": "association",
      "short": "Manage exact HubSpot CRM associations",
      "long": "Manage relationships between exact HubSpot CRM records.\n\nWorkflow:\n  find both records, inspect association types when needed, add an exact relationship, or preview removal before confirming.\n\nSelectors and filters:\n  --from and --to use object:ref selectors such as contact:ct1 and company:co1. types uses --from <object> --to <object>.\n\nOutput:\n  Human output uses local CRM refs. JSON and JSONL preserve exact HubSpot IDs and association type IDs.\n\nSafety:\n  association remove requires --dry-run or --yes. Records are not deleted when an association is removed.",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot association types --from contact --to company\n  hubspot association add --from contact:ct1 --to company:co1 --label \"Decision maker\"\n  hubspot association remove --from contact:ct1 --to company:co1 --dry-run",
      "flags": []
    },
    {
      "id": "cmd-hubspot-association-add",
      "path": "hubspot association add",
      "name": "add",
      "short": "Associate two exact HubSpot CRM records",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot association add --from contact:ct1 --to company:co1\nhubspot association add --help\nhubspot association types --from contact --to company",
      "flags": [
        {
          "name": "from",
          "type": "string",
          "usage": "Source object type or object:ref, such as contact or contact:ct1"
        },
        {
          "name": "label",
          "type": "string",
          "usage": "Association type ID from association types; omitted uses HubSpot default for the pair"
        },
        {
          "name": "to",
          "type": "string",
          "usage": "Target object type or object:ref, such as company or company:co1"
        }
      ]
    },
    {
      "id": "cmd-hubspot-association-list",
      "path": "hubspot association list",
      "name": "list",
      "short": "List HubSpot associations from an exact record",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot association list\nhubspot association list --from contact:ct1 --to company\nhubspot contact search --query ada",
      "flags": [
        {
          "name": "from",
          "type": "string",
          "usage": "Source object type or object:ref, such as contact or contact:ct1"
        },
        {
          "name": "to",
          "type": "string",
          "usage": "Target object type or object:ref, such as company or company:co1"
        }
      ]
    },
    {
      "id": "cmd-hubspot-association-remove",
      "path": "hubspot association remove",
      "name": "remove",
      "short": "Remove an exact HubSpot CRM association",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": true,
      "example": "hubspot association remove --from contact:ct1 --to company:co1 --dry-run\nhubspot association remove --from contact:ct1 --to company:co1 --yes\nhubspot association remove --help\nhubspot association remove a1 --dry-run",
      "flags": [
        {
          "name": "dry-run",
          "type": "bool",
          "usage": "Preview the exact association removal without mutating HubSpot"
        },
        {
          "name": "from",
          "type": "string",
          "usage": "Source object type or object:ref, such as contact or contact:ct1"
        },
        {
          "name": "to",
          "type": "string",
          "usage": "Target object type or object:ref, such as company or company:co1"
        },
        {
          "name": "yes",
          "type": "bool",
          "usage": "Confirm removal of the exact association"
        }
      ]
    },
    {
      "id": "cmd-hubspot-association-types",
      "path": "hubspot association types",
      "name": "types",
      "short": "List HubSpot association labels",
      "long": "",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot association types\nhubspot association types --from contact --to company",
      "flags": [
        {
          "name": "from",
          "type": "string",
          "usage": "Source object type or object:ref, such as contact or contact:ct1"
        },
        {
          "name": "to",
          "type": "string",
          "usage": "Target object type or object:ref, such as company or company:co1"
        }
      ]
    },
    {
      "id": "cmd-hubspot-auth",
      "path": "hubspot auth",
      "name": "auth",
      "short": "Manage HubSpot authentication",
      "long": "",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot auth --help",
      "flags": []
    },
    {
      "id": "cmd-hubspot-auth-login",
      "path": "hubspot auth login",
      "name": "login",
      "short": "Authenticate with a HubSpot OAuth grant",
      "long": "Starts HubSpot OAuth login for a HubSpot OAuth access token and refresh token through the cmdhub website broker. Normal users do not need a HubSpot OAuth client ID or client secret.",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot auth login\nhubspot auth login --help\nhubspot auth status",
      "flags": []
    },
    {
      "id": "cmd-hubspot-auth-logout",
      "path": "hubspot auth logout",
      "name": "logout",
      "short": "Remove stored HubSpot OAuth credentials",
      "long": "Deletes the selected profile's HubSpot OAuth access token and refresh token from the shared credential backend.",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot auth login\nhubspot auth logout\nhubspot auth logout --help",
      "flags": []
    },
    {
      "id": "cmd-hubspot-auth-refresh",
      "path": "hubspot auth refresh",
      "name": "refresh",
      "short": "Refresh the stored HubSpot OAuth access token",
      "long": "Refreshes the selected profile's HubSpot OAuth access token using maintainer OAuth app credentials when configured; otherwise rerun hubspot auth login to renew through the broker.",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot auth refresh\nhubspot auth refresh --help\nhubspot auth status",
      "flags": []
    },
    {
      "id": "cmd-hubspot-auth-status",
      "path": "hubspot auth status",
      "name": "status",
      "short": "Show HubSpot OAuth auth status",
      "long": "Reports whether the selected profile has a stored HubSpot OAuth access token and refresh token, whether the access token is valid, and whether required HubSpot OAuth scopes are present.",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot auth status\nhubspot auth status --help\nhubspot auth status --json",
      "flags": []
    },
    {
      "id": "cmd-hubspot-auth-whoami",
      "path": "hubspot auth whoami",
      "name": "whoami",
      "short": "Show the current HubSpot user and portal",
      "long": "Verifies the stored HubSpot OAuth access token and shows the configured HubSpot user and portal.",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot auth whoami\nhubspot auth whoami --help\nhubspot auth whoami --json",
      "flags": []
    },
    {
      "id": "cmd-hubspot-capabilities",
      "path": "hubspot capabilities",
      "name": "capabilities",
      "short": "Describe capabilities",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot capabilities --help",
      "flags": [
        {
          "name": "section",
          "type": "string",
          "usage": "Show one capability section: scopes, schemas, or commands"
        }
      ]
    },
    {
      "id": "cmd-hubspot-cleanup",
      "path": "hubspot cleanup",
      "name": "cleanup",
      "short": "Plan, run, and verify bounded cleanup of disposable HubSpot CRM data",
      "long": "Plan, run, and verify bounded cleanup of disposable cmdhub HubSpot CRM data.\n\nWorkflow:\n  create a cleanup manifest from a cmdhub-* token, review the manifest, run deletion with --yes, then verify the token is gone.\n\nSelectors and filters:\n  --token must start with cmdhub- or cmdhub-eval-. --objects bounds cleanup to contacts, companies, deals, tickets, and notes.\n  --manifest selects the generated cleanup manifest for run and verify.\n\nOutput:\n  Human output summarizes the manifest, refs, deleted records, and verification status. JSON preserves exact HubSpot IDs and URLs.\n\nSafety:\n  cleanup run requires --yes and only operates on records selected by a bounded manifest.",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot cleanup plan --token cmdhub-eval-20260607 --objects contacts,companies,deals,tickets,notes\n  hubspot cleanup run --manifest lifecycle/live/cleanup-cmdhub-eval-20260607.json --yes\n  hubspot cleanup verify --token cmdhub-eval-20260607",
      "flags": []
    },
    {
      "id": "cmd-hubspot-cleanup-plan",
      "path": "hubspot cleanup plan",
      "name": "plan",
      "short": "Preview disposable cmdhub CRM records and write a cleanup manifest",
      "long": "",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot cleanup plan\nhubspot cleanup plan --token cmdhub-eval-20260607 --objects contacts,companies",
      "flags": [
        {
          "name": "manifest",
          "type": "string",
          "usage": "Cleanup manifest path; defaults under apps/hubspot-cli/lifecycle/live"
        },
        {
          "name": "objects",
          "type": "string",
          "usage": "Comma-separated object set: contacts, companies, deals, tickets, notes"
        },
        {
          "name": "token",
          "type": "string",
          "usage": "Disposable cmdhub-* token to search for"
        }
      ]
    },
    {
      "id": "cmd-hubspot-cleanup-run",
      "path": "hubspot cleanup run",
      "name": "run",
      "short": "Delete only records listed in a cleanup manifest",
      "long": "",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot cleanup run --help\nhubspot cleanup run --manifest apps/hubspot-cli/lifecycle/live/cleanup-cmdhub-eval-20260607.json --yes",
      "flags": [
        {
          "name": "manifest",
          "type": "string",
          "usage": "Cleanup manifest path from cleanup plan"
        },
        {
          "name": "yes",
          "type": "bool",
          "usage": "Confirm deletion of only records listed in the manifest"
        }
      ]
    },
    {
      "id": "cmd-hubspot-cleanup-verify",
      "path": "hubspot cleanup verify",
      "name": "verify",
      "short": "Verify disposable cmdhub CRM records are gone",
      "long": "",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot cleanup verify\nhubspot cleanup verify --token cmdhub-eval-20260607 --objects contacts,companies",
      "flags": [
        {
          "name": "manifest",
          "type": "string",
          "usage": "Cleanup manifest path to verify"
        },
        {
          "name": "objects",
          "type": "string",
          "usage": "Comma-separated object set: contacts, companies, deals, tickets, notes"
        },
        {
          "name": "token",
          "type": "string",
          "usage": "Disposable cmdhub-* token to search for"
        }
      ]
    },
    {
      "id": "cmd-hubspot-company",
      "path": "hubspot company",
      "name": "company",
      "short": "Work with HubSpot company records",
      "long": "Work with HubSpot company records.\n\nActions:\n  list, search, get, create, update, upsert, delete, restore\n\nWorkflow:\n  search or list records, inspect the selected local ref, then run exact create, update, move, delete, or restore commands.\n\nSelectors and filters:\n  get, update, delete, and restore accept local refs like co1, HubSpot record IDs, and exact unique values when available.\n  Useful filters include --query, --owner, --created-after, --updated-after, --archived, and --property name=value.\n  company records commonly use --domain as their unique selector.\n\nOutput:\n  Human output uses local refs and hides long HubSpot IDs. Use --json or --jsonl for exact IDs, URLs, properties, cursors, and associations.\n\nSafety:\n  delete requires --dry-run or --yes. Use restore for records recoverable from the HubSpot recycle bin.",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot company search --query cmdhub --limit 5\n  hubspot company get co1 --view full\n  hubspot company create --name \"Cmdhub Eval\" --domain example.invalid\n  hubspot company search --query cmdhub --limit 5\n  hubspot company update co1 --property lifecyclestage=customer\n  hubspot company delete co1 --dry-run",
      "flags": []
    },
    {
      "id": "cmd-hubspot-company-create",
      "path": "hubspot company create",
      "name": "create",
      "short": "Create a HubSpot company",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot company create --help\nhubspot company create --name \"Cmdhub Eval\" --domain example.invalid",
      "flags": [
        {
          "name": "city",
          "type": "string",
          "usage": "Company city"
        },
        {
          "name": "country",
          "type": "string",
          "usage": "Company country"
        },
        {
          "name": "domain",
          "type": "string",
          "usage": "Company domain"
        },
        {
          "name": "industry",
          "type": "string",
          "usage": "Company industry"
        },
        {
          "name": "lifecycle-stage",
          "type": "string",
          "usage": "Company lifecycle stage"
        },
        {
          "name": "name",
          "type": "string",
          "usage": "Company name"
        },
        {
          "name": "owner",
          "type": "string",
          "usage": "HubSpot owner ID or ref"
        },
        {
          "name": "property",
          "type": "stringArray",
          "default": "[]",
          "usage": "Additional HubSpot property as name=value"
        }
      ]
    },
    {
      "id": "cmd-hubspot-company-delete",
      "path": "hubspot company delete",
      "name": "delete",
      "short": "Delete an exact HubSpot company",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": true,
      "example": "hubspot company delete --help\nhubspot company delete co1 --dry-run\nhubspot company delete co1 --yes\nhubspot company search --query cmdhub-eval --limit 5",
      "flags": [
        {
          "name": "dry-run",
          "type": "bool",
          "usage": "Preview the exact delete without mutating HubSpot"
        },
        {
          "name": "yes",
          "type": "bool",
          "usage": "Confirm deletion of the exact displayed record"
        }
      ]
    },
    {
      "id": "cmd-hubspot-company-get",
      "path": "hubspot company get",
      "name": "get",
      "short": "Inspect a HubSpot company",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot company get\nhubspot company get co1 --view full\nhubspot company search --query cmdhub --limit 5",
      "flags": []
    },
    {
      "id": "cmd-hubspot-company-list",
      "path": "hubspot company list",
      "name": "list",
      "short": "List HubSpot companies",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot company get co1 --view full\nhubspot company list\nhubspot company list --limit 10",
      "flags": [
        {
          "name": "archived",
          "type": "string",
          "usage": "Archived filter: true or false"
        },
        {
          "name": "city",
          "type": "string",
          "usage": "Filter by company city"
        },
        {
          "name": "country",
          "type": "string",
          "usage": "Filter by company country"
        },
        {
          "name": "created-after",
          "type": "string",
          "usage": "Only records created after YYYY-MM-DD or RFC3339"
        },
        {
          "name": "domain",
          "type": "string",
          "usage": "Filter by company domain"
        },
        {
          "name": "filter",
          "type": "stringArray",
          "default": "[]",
          "usage": "Property filter as name=value, name:OP:value, or \"name OP value\""
        },
        {
          "name": "industry",
          "type": "string",
          "usage": "Filter by company industry"
        },
        {
          "name": "lifecycle-stage",
          "type": "string",
          "usage": "Filter by company lifecycle stage"
        },
        {
          "name": "name",
          "type": "string",
          "usage": "Filter by company name"
        },
        {
          "name": "owner",
          "type": "string",
          "usage": "HubSpot owner ID, owner ref, email, or name"
        },
        {
          "name": "property",
          "type": "stringArray",
          "default": "[]",
          "usage": "Additional exact property filter as name=value"
        },
        {
          "name": "updated-after",
          "type": "string",
          "usage": "Only records updated after YYYY-MM-DD or RFC3339"
        }
      ]
    },
    {
      "id": "cmd-hubspot-company-restore",
      "path": "hubspot company restore",
      "name": "restore",
      "short": "Restore a HubSpot company from recycle bin",
      "long": "",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot company restore --help\nhubspot company restore co1",
      "flags": []
    },
    {
      "id": "cmd-hubspot-company-search",
      "path": "hubspot company search",
      "name": "search",
      "short": "Search HubSpot companies",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot company get co1 --view full\nhubspot company search\nhubspot company search --query cmdhub --limit 5\nhubspot company search --query example --limit 5",
      "flags": [
        {
          "name": "archived",
          "type": "string",
          "usage": "Archived filter: true or false"
        },
        {
          "name": "city",
          "type": "string",
          "usage": "Filter by company city"
        },
        {
          "name": "country",
          "type": "string",
          "usage": "Filter by company country"
        },
        {
          "name": "created-after",
          "type": "string",
          "usage": "Only records created after YYYY-MM-DD or RFC3339"
        },
        {
          "name": "domain",
          "type": "string",
          "usage": "Filter by company domain"
        },
        {
          "name": "filter",
          "type": "stringArray",
          "default": "[]",
          "usage": "Property filter as name=value, name:OP:value, or \"name OP value\""
        },
        {
          "name": "industry",
          "type": "string",
          "usage": "Filter by company industry"
        },
        {
          "name": "lifecycle-stage",
          "type": "string",
          "usage": "Filter by company lifecycle stage"
        },
        {
          "name": "name",
          "type": "string",
          "usage": "Filter by company name"
        },
        {
          "name": "owner",
          "type": "string",
          "usage": "HubSpot owner ID, owner ref, email, or name"
        },
        {
          "name": "property",
          "type": "stringArray",
          "default": "[]",
          "usage": "Additional exact property filter as name=value"
        },
        {
          "name": "query",
          "type": "string",
          "usage": "Text to search across HubSpot default searchable properties"
        },
        {
          "name": "sort",
          "type": "stringArray",
          "default": "[]",
          "usage": "Sort as property:asc or property:desc"
        },
        {
          "name": "updated-after",
          "type": "string",
          "usage": "Only records updated after YYYY-MM-DD or RFC3339"
        }
      ]
    },
    {
      "id": "cmd-hubspot-company-update",
      "path": "hubspot company update",
      "name": "update",
      "short": "Update an exact HubSpot company",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot company search --query cmdhub --limit 5\nhubspot company update --help\nhubspot company update co1 --property lifecyclestage=customer",
      "flags": [
        {
          "name": "city",
          "type": "string",
          "usage": "Company city"
        },
        {
          "name": "country",
          "type": "string",
          "usage": "Company country"
        },
        {
          "name": "domain",
          "type": "string",
          "usage": "Company domain"
        },
        {
          "name": "industry",
          "type": "string",
          "usage": "Company industry"
        },
        {
          "name": "lifecycle-stage",
          "type": "string",
          "usage": "Company lifecycle stage"
        },
        {
          "name": "name",
          "type": "string",
          "usage": "Company name"
        },
        {
          "name": "owner",
          "type": "string",
          "usage": "HubSpot owner ID or ref"
        },
        {
          "name": "property",
          "type": "stringArray",
          "default": "[]",
          "usage": "HubSpot property update as name=value"
        }
      ]
    },
    {
      "id": "cmd-hubspot-company-upsert",
      "path": "hubspot company upsert",
      "name": "upsert",
      "short": "Create or update a HubSpot company by domain",
      "long": "",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot company upsert --domain cmdhub-eval@example.invalid --property lifecyclestage=customer\nhubspot company upsert --domain example.invalid --name \"Cmdhub Eval\"\nhubspot company upsert --help",
      "flags": [
        {
          "name": "city",
          "type": "string",
          "usage": "Company city"
        },
        {
          "name": "country",
          "type": "string",
          "usage": "Company country"
        },
        {
          "name": "domain",
          "type": "string",
          "usage": "Company domain"
        },
        {
          "name": "industry",
          "type": "string",
          "usage": "Company industry"
        },
        {
          "name": "lifecycle-stage",
          "type": "string",
          "usage": "Company lifecycle stage"
        },
        {
          "name": "name",
          "type": "string",
          "usage": "Company name"
        },
        {
          "name": "owner",
          "type": "string",
          "usage": "HubSpot owner ID or ref"
        },
        {
          "name": "property",
          "type": "stringArray",
          "default": "[]",
          "usage": "Additional HubSpot property as name=value"
        }
      ]
    },
    {
      "id": "cmd-hubspot-config",
      "path": "hubspot config",
      "name": "config",
      "short": "Inspect local configuration",
      "long": "",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot config --help",
      "flags": []
    },
    {
      "id": "cmd-hubspot-config-explain",
      "path": "hubspot config explain",
      "name": "explain",
      "short": "Explain resolved configuration",
      "long": "",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot config explain --help",
      "flags": []
    },
    {
      "id": "cmd-hubspot-contact",
      "path": "hubspot contact",
      "name": "contact",
      "short": "Work with HubSpot contact records",
      "long": "Work with HubSpot contact records.\n\nActions:\n  list, search, get, create, update, upsert, delete, restore\n\nWorkflow:\n  search or list records, inspect the selected local ref, then run exact create, update, move, delete, or restore commands.\n\nSelectors and filters:\n  get, update, delete, and restore accept local refs like ct1, HubSpot record IDs, and exact unique values when available.\n  Useful filters include --query, --owner, --created-after, --updated-after, --archived, and --property name=value.\n  contact records commonly use --email as their unique selector.\n\nOutput:\n  Human output uses local refs and hides long HubSpot IDs. Use --json or --jsonl for exact IDs, URLs, properties, cursors, and associations.\n\nSafety:\n  delete requires --dry-run or --yes. Use restore for records recoverable from the HubSpot recycle bin.",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot contact search --query cmdhub --limit 5\n  hubspot contact get ct1 --view full\n  hubspot contact create --email cmdhub-eval@example.com --first-name Cmdhub --last-name Eval\n  hubspot contact search --query cmdhub --limit 5\n  hubspot contact update ct1 --lifecycle-stage customer\n  hubspot contact delete ct1 --dry-run",
      "flags": []
    },
    {
      "id": "cmd-hubspot-contact-create",
      "path": "hubspot contact create",
      "name": "create",
      "short": "Create a HubSpot contact",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot contact create --email cmdhub-eval@example.com --first-name Cmdhub\nhubspot contact create --email cmdhub-eval@example.com --first-name Cmdhub --last-name Eval\nhubspot contact create --help",
      "flags": [
        {
          "name": "email",
          "type": "string",
          "usage": "Contact email"
        },
        {
          "name": "first-name",
          "type": "string",
          "usage": "Contact first name"
        },
        {
          "name": "last-name",
          "type": "string",
          "usage": "Contact last name"
        },
        {
          "name": "lifecycle-stage",
          "type": "string",
          "usage": "Contact lifecycle stage"
        },
        {
          "name": "owner",
          "type": "string",
          "usage": "HubSpot owner ID or ref"
        },
        {
          "name": "phone",
          "type": "string",
          "usage": "Contact phone number"
        },
        {
          "name": "property",
          "type": "stringArray",
          "default": "[]",
          "usage": "Additional HubSpot property as name=value"
        }
      ]
    },
    {
      "id": "cmd-hubspot-contact-delete",
      "path": "hubspot contact delete",
      "name": "delete",
      "short": "Delete an exact HubSpot contact",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": true,
      "example": "hubspot contact delete --help\nhubspot contact delete ct1 --dry-run\nhubspot contact delete ct1 --yes\nhubspot contact search --query cmdhub-eval --limit 5",
      "flags": [
        {
          "name": "dry-run",
          "type": "bool",
          "usage": "Preview the exact delete without mutating HubSpot"
        },
        {
          "name": "yes",
          "type": "bool",
          "usage": "Confirm deletion of the exact displayed record"
        }
      ]
    },
    {
      "id": "cmd-hubspot-contact-get",
      "path": "hubspot contact get",
      "name": "get",
      "short": "Inspect a HubSpot contact",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot contact get\nhubspot contact get ct1 --view full\nhubspot contact search --query cmdhub --limit 5",
      "flags": []
    },
    {
      "id": "cmd-hubspot-contact-list",
      "path": "hubspot contact list",
      "name": "list",
      "short": "List HubSpot contacts",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot contact get ct1 --view full\nhubspot contact list\nhubspot contact list --limit 10",
      "flags": [
        {
          "name": "archived",
          "type": "string",
          "usage": "Archived filter: true or false"
        },
        {
          "name": "created-after",
          "type": "string",
          "usage": "Only records created after YYYY-MM-DD or RFC3339"
        },
        {
          "name": "email",
          "type": "string",
          "usage": "Filter by contact email"
        },
        {
          "name": "filter",
          "type": "stringArray",
          "default": "[]",
          "usage": "Property filter as name=value, name:OP:value, or \"name OP value\""
        },
        {
          "name": "first-name",
          "type": "string",
          "usage": "Filter by contact first name"
        },
        {
          "name": "last-name",
          "type": "string",
          "usage": "Filter by contact last name"
        },
        {
          "name": "lifecycle-stage",
          "type": "string",
          "usage": "Filter by contact lifecycle stage"
        },
        {
          "name": "owner",
          "type": "string",
          "usage": "HubSpot owner ID, owner ref, email, or name"
        },
        {
          "name": "phone",
          "type": "string",
          "usage": "Filter by contact phone"
        },
        {
          "name": "property",
          "type": "stringArray",
          "default": "[]",
          "usage": "Additional exact property filter as name=value"
        },
        {
          "name": "updated-after",
          "type": "string",
          "usage": "Only records updated after YYYY-MM-DD or RFC3339"
        }
      ]
    },
    {
      "id": "cmd-hubspot-contact-restore",
      "path": "hubspot contact restore",
      "name": "restore",
      "short": "Restore a HubSpot contact from recycle bin",
      "long": "",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot contact restore --help\nhubspot contact restore ct1",
      "flags": []
    },
    {
      "id": "cmd-hubspot-contact-search",
      "path": "hubspot contact search",
      "name": "search",
      "short": "Search HubSpot contacts",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot contact get ct1 --view full\nhubspot contact search\nhubspot contact search --query alice --limit 5\nhubspot contact search --query cmdhub --limit 5",
      "flags": [
        {
          "name": "archived",
          "type": "string",
          "usage": "Archived filter: true or false"
        },
        {
          "name": "created-after",
          "type": "string",
          "usage": "Only records created after YYYY-MM-DD or RFC3339"
        },
        {
          "name": "email",
          "type": "string",
          "usage": "Filter by contact email"
        },
        {
          "name": "filter",
          "type": "stringArray",
          "default": "[]",
          "usage": "Property filter as name=value, name:OP:value, or \"name OP value\""
        },
        {
          "name": "first-name",
          "type": "string",
          "usage": "Filter by contact first name"
        },
        {
          "name": "last-name",
          "type": "string",
          "usage": "Filter by contact last name"
        },
        {
          "name": "lifecycle-stage",
          "type": "string",
          "usage": "Filter by contact lifecycle stage"
        },
        {
          "name": "owner",
          "type": "string",
          "usage": "HubSpot owner ID, owner ref, email, or name"
        },
        {
          "name": "phone",
          "type": "string",
          "usage": "Filter by contact phone"
        },
        {
          "name": "property",
          "type": "stringArray",
          "default": "[]",
          "usage": "Additional exact property filter as name=value"
        },
        {
          "name": "query",
          "type": "string",
          "usage": "Text to search across HubSpot default searchable properties"
        },
        {
          "name": "sort",
          "type": "stringArray",
          "default": "[]",
          "usage": "Sort as property:asc or property:desc"
        },
        {
          "name": "updated-after",
          "type": "string",
          "usage": "Only records updated after YYYY-MM-DD or RFC3339"
        }
      ]
    },
    {
      "id": "cmd-hubspot-contact-update",
      "path": "hubspot contact update",
      "name": "update",
      "short": "Update an exact HubSpot contact",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot contact search --query cmdhub --limit 5\nhubspot contact update --help\nhubspot contact update ct1 --lifecycle-stage customer",
      "flags": [
        {
          "name": "email",
          "type": "string",
          "usage": "Contact email"
        },
        {
          "name": "first-name",
          "type": "string",
          "usage": "Contact first name"
        },
        {
          "name": "last-name",
          "type": "string",
          "usage": "Contact last name"
        },
        {
          "name": "lifecycle-stage",
          "type": "string",
          "usage": "Contact lifecycle stage"
        },
        {
          "name": "owner",
          "type": "string",
          "usage": "HubSpot owner ID or ref"
        },
        {
          "name": "phone",
          "type": "string",
          "usage": "Contact phone number"
        },
        {
          "name": "property",
          "type": "stringArray",
          "default": "[]",
          "usage": "HubSpot property update as name=value"
        }
      ]
    },
    {
      "id": "cmd-hubspot-contact-upsert",
      "path": "hubspot contact upsert",
      "name": "upsert",
      "short": "Create or update a HubSpot contact by email",
      "long": "",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot contact upsert --email cmdhub-eval@example.com --first-name Cmdhub\nhubspot contact upsert --email cmdhub-eval@example.invalid --property lifecyclestage=customer\nhubspot contact upsert --help",
      "flags": [
        {
          "name": "email",
          "type": "string",
          "usage": "Contact email"
        },
        {
          "name": "first-name",
          "type": "string",
          "usage": "Contact first name"
        },
        {
          "name": "last-name",
          "type": "string",
          "usage": "Contact last name"
        },
        {
          "name": "lifecycle-stage",
          "type": "string",
          "usage": "Contact lifecycle stage"
        },
        {
          "name": "owner",
          "type": "string",
          "usage": "HubSpot owner ID or ref"
        },
        {
          "name": "phone",
          "type": "string",
          "usage": "Contact phone number"
        },
        {
          "name": "property",
          "type": "stringArray",
          "default": "[]",
          "usage": "Additional HubSpot property as name=value"
        }
      ]
    },
    {
      "id": "cmd-hubspot-deal",
      "path": "hubspot deal",
      "name": "deal",
      "short": "Work with HubSpot deal records",
      "long": "Work with HubSpot deal records.\n\nActions:\n  list, search, get, create, update, move, delete, restore\n\nWorkflow:\n  search or list records, inspect the selected local ref, then run exact create, update, move, delete, or restore commands.\n\nSelectors and filters:\n  get, update, delete, and restore accept local refs like d1, HubSpot record IDs, and exact unique values when available.\n  Useful filters include --query, --owner, --created-after, --updated-after, --archived, and --property name=value.\n  deal records commonly use --name as their unique selector.\n\nOutput:\n  Human output uses local refs and hides long HubSpot IDs. Use --json or --jsonl for exact IDs, URLs, properties, cursors, and associations.\n\nSafety:\n  delete requires --dry-run or --yes. Use restore for records recoverable from the HubSpot recycle bin.",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot deal search --query cmdhub --limit 5\n  hubspot deal get d1 --view full\n  hubspot deal create --name \"Cmdhub Eval Renewal\" --amount 1000 --stage appointmentscheduled\n  hubspot deal search --query cmdhub --limit 5\n  hubspot deal update d1 --amount 2500\n  hubspot deal move d1 --stage s2\n  hubspot deal delete d1 --dry-run",
      "flags": []
    },
    {
      "id": "cmd-hubspot-deal-create",
      "path": "hubspot deal create",
      "name": "create",
      "short": "Create a HubSpot deal",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot deal create --help\nhubspot deal create --name \"Cmdhub Eval Renewal\" --amount 1000 --stage appointmentscheduled",
      "flags": [
        {
          "name": "amount",
          "type": "string",
          "usage": "Deal amount"
        },
        {
          "name": "close-date",
          "type": "string",
          "usage": "Deal close date"
        },
        {
          "name": "company",
          "type": "string",
          "usage": "Company ref or ID to associate after create"
        },
        {
          "name": "contact",
          "type": "string",
          "usage": "Contact ref or ID to associate after create"
        },
        {
          "name": "name",
          "type": "string",
          "usage": "Deal name"
        },
        {
          "name": "owner",
          "type": "string",
          "usage": "HubSpot owner ID or ref"
        },
        {
          "name": "pipeline",
          "type": "string",
          "usage": "Deal pipeline ID or ref"
        },
        {
          "name": "property",
          "type": "stringArray",
          "default": "[]",
          "usage": "Additional HubSpot property as name=value"
        },
        {
          "name": "stage",
          "type": "string",
          "usage": "Deal stage ID or ref"
        }
      ]
    },
    {
      "id": "cmd-hubspot-deal-delete",
      "path": "hubspot deal delete",
      "name": "delete",
      "short": "Delete an exact HubSpot deal",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": true,
      "example": "hubspot deal delete --help\nhubspot deal delete d1 --dry-run\nhubspot deal delete d1 --yes\nhubspot deal search --query cmdhub-eval --limit 5",
      "flags": [
        {
          "name": "dry-run",
          "type": "bool",
          "usage": "Preview the exact delete without mutating HubSpot"
        },
        {
          "name": "yes",
          "type": "bool",
          "usage": "Confirm deletion of the exact displayed record"
        }
      ]
    },
    {
      "id": "cmd-hubspot-deal-get",
      "path": "hubspot deal get",
      "name": "get",
      "short": "Inspect a HubSpot deal",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot deal get\nhubspot deal get d1 --view full\nhubspot deal search --query cmdhub --limit 5",
      "flags": []
    },
    {
      "id": "cmd-hubspot-deal-list",
      "path": "hubspot deal list",
      "name": "list",
      "short": "List HubSpot deals",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot deal get d1 --view full\nhubspot deal list\nhubspot deal list --limit 10",
      "flags": [
        {
          "name": "amount",
          "type": "string",
          "usage": "Filter by deal amount"
        },
        {
          "name": "archived",
          "type": "string",
          "usage": "Archived filter: true or false"
        },
        {
          "name": "close-date",
          "type": "string",
          "usage": "Filter by deal close date"
        },
        {
          "name": "company",
          "type": "string",
          "usage": "Filter by associated company ref or ID"
        },
        {
          "name": "contact",
          "type": "string",
          "usage": "Filter by associated contact ref or ID"
        },
        {
          "name": "created-after",
          "type": "string",
          "usage": "Only records created after YYYY-MM-DD or RFC3339"
        },
        {
          "name": "filter",
          "type": "stringArray",
          "default": "[]",
          "usage": "Property filter as name=value, name:OP:value, or \"name OP value\""
        },
        {
          "name": "name",
          "type": "string",
          "usage": "Filter by deal name"
        },
        {
          "name": "owner",
          "type": "string",
          "usage": "HubSpot owner ID, owner ref, email, or name"
        },
        {
          "name": "pipeline",
          "type": "string",
          "usage": "Filter by deal pipeline ID or ref"
        },
        {
          "name": "property",
          "type": "stringArray",
          "default": "[]",
          "usage": "Additional exact property filter as name=value"
        },
        {
          "name": "stage",
          "type": "string",
          "usage": "Filter by deal stage ID, ref, or label"
        },
        {
          "name": "updated-after",
          "type": "string",
          "usage": "Only records updated after YYYY-MM-DD or RFC3339"
        }
      ]
    },
    {
      "id": "cmd-hubspot-deal-move",
      "path": "hubspot deal move",
      "name": "move",
      "short": "Move a HubSpot deal to another stage",
      "long": "Move a HubSpot deal only after validating the requested stage against HubSpot pipeline metadata. Stage accepts a displayed stage ref from `hubspot pipeline get p1 --object deal`, an exact stage ID, or an unambiguous stage label. Use --pipeline when labels are ambiguous across pipelines.",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot deal move --help\nhubspot deal move d1 --stage s2\nhubspot pipeline list --object deal",
      "flags": [
        {
          "name": "pipeline",
          "type": "string",
          "usage": "Pipeline ref or pipeline ID"
        },
        {
          "name": "stage",
          "type": "string",
          "usage": "Stage ref, stage ID, or stage label"
        }
      ]
    },
    {
      "id": "cmd-hubspot-deal-restore",
      "path": "hubspot deal restore",
      "name": "restore",
      "short": "Restore a HubSpot deal from recycle bin",
      "long": "",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot deal restore --help\nhubspot deal restore d1",
      "flags": []
    },
    {
      "id": "cmd-hubspot-deal-search",
      "path": "hubspot deal search",
      "name": "search",
      "short": "Search HubSpot deals",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot deal get d1 --view full\nhubspot deal search\nhubspot deal search --query cmdhub --limit 5",
      "flags": [
        {
          "name": "amount",
          "type": "string",
          "usage": "Filter by deal amount"
        },
        {
          "name": "archived",
          "type": "string",
          "usage": "Archived filter: true or false"
        },
        {
          "name": "close-date",
          "type": "string",
          "usage": "Filter by deal close date"
        },
        {
          "name": "company",
          "type": "string",
          "usage": "Filter by associated company ref or ID"
        },
        {
          "name": "contact",
          "type": "string",
          "usage": "Filter by associated contact ref or ID"
        },
        {
          "name": "created-after",
          "type": "string",
          "usage": "Only records created after YYYY-MM-DD or RFC3339"
        },
        {
          "name": "filter",
          "type": "stringArray",
          "default": "[]",
          "usage": "Property filter as name=value, name:OP:value, or \"name OP value\""
        },
        {
          "name": "name",
          "type": "string",
          "usage": "Filter by deal name"
        },
        {
          "name": "owner",
          "type": "string",
          "usage": "HubSpot owner ID, owner ref, email, or name"
        },
        {
          "name": "pipeline",
          "type": "string",
          "usage": "Filter by deal pipeline ID or ref"
        },
        {
          "name": "property",
          "type": "stringArray",
          "default": "[]",
          "usage": "Additional exact property filter as name=value"
        },
        {
          "name": "query",
          "type": "string",
          "usage": "Text to search across HubSpot default searchable properties"
        },
        {
          "name": "sort",
          "type": "stringArray",
          "default": "[]",
          "usage": "Sort as property:asc or property:desc"
        },
        {
          "name": "stage",
          "type": "string",
          "usage": "Filter by deal stage ID, ref, or label"
        },
        {
          "name": "updated-after",
          "type": "string",
          "usage": "Only records updated after YYYY-MM-DD or RFC3339"
        }
      ]
    },
    {
      "id": "cmd-hubspot-deal-update",
      "path": "hubspot deal update",
      "name": "update",
      "short": "Update an exact HubSpot deal",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot deal search --query cmdhub --limit 5\nhubspot deal update --help\nhubspot deal update d1 --amount 2500",
      "flags": [
        {
          "name": "amount",
          "type": "string",
          "usage": "Deal amount"
        },
        {
          "name": "close-date",
          "type": "string",
          "usage": "Deal close date"
        },
        {
          "name": "company",
          "type": "string",
          "usage": "Company ref or ID to associate after create"
        },
        {
          "name": "contact",
          "type": "string",
          "usage": "Contact ref or ID to associate after create"
        },
        {
          "name": "name",
          "type": "string",
          "usage": "Deal name"
        },
        {
          "name": "owner",
          "type": "string",
          "usage": "HubSpot owner ID or ref"
        },
        {
          "name": "pipeline",
          "type": "string",
          "usage": "Deal pipeline ID or ref"
        },
        {
          "name": "property",
          "type": "stringArray",
          "default": "[]",
          "usage": "HubSpot property update as name=value"
        },
        {
          "name": "stage",
          "type": "string",
          "usage": "Deal stage ID or ref"
        }
      ]
    },
    {
      "id": "cmd-hubspot-doctor",
      "path": "hubspot doctor",
      "name": "doctor",
      "short": "Run diagnostics",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot doctor --help",
      "flags": []
    },
    {
      "id": "cmd-hubspot-note",
      "path": "hubspot note",
      "name": "note",
      "short": "Work with HubSpot CRM notes",
      "long": "Work with HubSpot notes attached to exact CRM records.\n\nWorkflow:\n  find the target contact, company, deal, or ticket; create or list notes with --on <object:ref>; then inspect or update the note by local ref.\n\nSelectors and filters:\n  --on accepts contact:ct1, company:co1, deal:d1, or ticket:tk1. create accepts --body or --body-file.\n  list and search accept created/updated filters and pagination flags.\n\nOutput:\n  Human output uses note refs n1 and CRM refs. JSON and JSONL preserve exact note IDs and associations.\n\nSafety:\n  delete requires --dry-run or --yes. Pin and unpin require an exact target record.",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot note create --on deal:d1 --body \"Customer asked for renewal quote.\"\n  hubspot note list --on deal:d1\n  hubspot note get n1 --view full\n  hubspot note delete n1 --dry-run",
      "flags": []
    },
    {
      "id": "cmd-hubspot-note-create",
      "path": "hubspot note create",
      "name": "create",
      "short": "Create a HubSpot CRM note",
      "long": "Create a HubSpot CRM note on one exact record. Prefer --on <object:ref>, such as --on deal:d1, after listing or searching the target record. Use --body for short text or --body-file for a local UTF-8 note body.",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot contact search --query cmdhub --limit 5\nhubspot note create --help\nhubspot note create --on contact:ct1 --body \"Left voicemail.\"\nhubspot note create --on deal:d1 --body-file note.txt",
      "flags": [
        {
          "name": "body",
          "type": "string",
          "usage": "Note body"
        },
        {
          "name": "body-file",
          "type": "string",
          "usage": "Read note body from a local UTF-8 file"
        },
        {
          "name": "company",
          "type": "string",
          "usage": "Company ref or ID to associate"
        },
        {
          "name": "contact",
          "type": "string",
          "usage": "Contact ref or ID to associate"
        },
        {
          "name": "deal",
          "type": "string",
          "usage": "Deal ref or ID to associate"
        },
        {
          "name": "on",
          "type": "string",
          "usage": "Target record as object:ref, such as deal:d1"
        },
        {
          "name": "ticket",
          "type": "string",
          "usage": "Ticket ref or ID to associate"
        }
      ]
    },
    {
      "id": "cmd-hubspot-note-delete",
      "path": "hubspot note delete",
      "name": "delete",
      "short": "Delete an exact HubSpot CRM note",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": true,
      "example": "hubspot note delete --help\nhubspot note delete n1 --dry-run\nhubspot note delete n1 --yes",
      "flags": [
        {
          "name": "dry-run",
          "type": "bool",
          "usage": "Preview the exact note deletion without mutating HubSpot"
        },
        {
          "name": "yes",
          "type": "bool",
          "usage": "Confirm deletion of the exact displayed note"
        }
      ]
    },
    {
      "id": "cmd-hubspot-note-get",
      "path": "hubspot note get",
      "name": "get",
      "short": "Inspect a HubSpot CRM note",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot note get\nhubspot note get n1 --view full",
      "flags": []
    },
    {
      "id": "cmd-hubspot-note-list",
      "path": "hubspot note list",
      "name": "list",
      "short": "List HubSpot CRM notes",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot note list\nhubspot note list --on deal:d1",
      "flags": [
        {
          "name": "created-after",
          "type": "string",
          "usage": "Only records created after YYYY-MM-DD or RFC3339"
        },
        {
          "name": "on",
          "type": "string",
          "usage": "Target record as object:ref, such as deal:d1"
        }
      ]
    },
    {
      "id": "cmd-hubspot-note-pin",
      "path": "hubspot note pin",
      "name": "pin",
      "short": "Pin a HubSpot CRM note on a record",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot note pin --help\nhubspot note pin n1 --on deal:d1",
      "flags": [
        {
          "name": "on",
          "type": "string",
          "usage": "Target record as object:ref, such as deal:d1"
        }
      ]
    },
    {
      "id": "cmd-hubspot-note-search",
      "path": "hubspot note search",
      "name": "search",
      "short": "Search HubSpot CRM notes",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot note search\nhubspot note search --query renewal --limit 5",
      "flags": [
        {
          "name": "created-after",
          "type": "string",
          "usage": "Only records created after YYYY-MM-DD or RFC3339"
        },
        {
          "name": "on",
          "type": "string",
          "usage": "Target record as object:ref, such as deal:d1"
        },
        {
          "name": "query",
          "type": "string",
          "usage": "Text to search note bodies"
        },
        {
          "name": "sort",
          "type": "stringArray",
          "default": "[]",
          "usage": "Sort as property:asc or property:desc"
        }
      ]
    },
    {
      "id": "cmd-hubspot-note-unpin",
      "path": "hubspot note unpin",
      "name": "unpin",
      "short": "Unpin a HubSpot CRM note from a record",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot note unpin --help\nhubspot note unpin n1 --on deal:d1",
      "flags": [
        {
          "name": "on",
          "type": "string",
          "usage": "Target record as object:ref, such as deal:d1"
        }
      ]
    },
    {
      "id": "cmd-hubspot-note-update",
      "path": "hubspot note update",
      "name": "update",
      "short": "Update an exact HubSpot CRM note",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot note update --help\nhubspot note update n1 --body \"Updated context.\"",
      "flags": [
        {
          "name": "body",
          "type": "string",
          "usage": "Updated note body"
        },
        {
          "name": "property",
          "type": "stringArray",
          "default": "[]",
          "usage": "HubSpot note property update as name=value"
        }
      ]
    },
    {
      "id": "cmd-hubspot-owner",
      "path": "hubspot owner",
      "name": "owner",
      "short": "Discover HubSpot owners",
      "long": "Discover assignable HubSpot CRM owners before create or update commands.\n\nWorkflow:\n  list or search owners, then use displayed owner refs such as o1 with --owner on CRM record commands.\n\nSelectors and filters:\n  owner get accepts an owner ref, owner ID, email, or exact name. owner search accepts --query for names and email addresses.\n\nOutput:\n  Human output uses owner refs o1. JSON and JSONL preserve exact HubSpot owner IDs.\n\nSafety:\n  Read-only metadata. The HubSpot owner ID is the assignment value, not userId.",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot owner search --query ada@example.com\n  hubspot owner get o1\n  hubspot contact update ct1 --owner o1",
      "flags": []
    },
    {
      "id": "cmd-hubspot-owner-get",
      "path": "hubspot owner get",
      "name": "get",
      "short": "Inspect a HubSpot owner",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot owner get\nhubspot owner get o1",
      "flags": []
    },
    {
      "id": "cmd-hubspot-owner-list",
      "path": "hubspot owner list",
      "name": "list",
      "short": "List HubSpot owners",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot owner list\nhubspot owner list --json",
      "flags": []
    },
    {
      "id": "cmd-hubspot-owner-search",
      "path": "hubspot owner search",
      "name": "search",
      "short": "Search HubSpot owners",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot owner search\nhubspot owner search --query ada",
      "flags": [
        {
          "name": "query",
          "type": "string",
          "usage": "Text to match owner name or email"
        }
      ]
    },
    {
      "id": "cmd-hubspot-pipeline",
      "path": "hubspot pipeline",
      "name": "pipeline",
      "short": "Discover HubSpot deal and ticket pipelines",
      "long": "Discover read-only HubSpot deal and ticket pipeline metadata before moving records.\n\nWorkflow:\n  list pipelines for the object, inspect one pipeline, then use displayed stage refs with deal move or ticket move.\n\nSelectors and filters:\n  pipeline get accepts a local pipeline ref such as p1, a HubSpot pipeline ID, or an exact pipeline label.\n  --object selects deal or ticket pipelines.\n\nOutput:\n  Human output uses pipeline refs p1 and stage refs s1. JSON and JSONL preserve exact HubSpot IDs.\n\nSafety:\n  Pipeline and stage administration is out of scope; this command only reads metadata.",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot pipeline list --object deal\n  hubspot pipeline get p1 --object deal\n  hubspot deal move d1 --stage s2\n  hubspot pipeline stage get s2 --object deal --pipeline p1",
      "flags": []
    },
    {
      "id": "cmd-hubspot-pipeline-get",
      "path": "hubspot pipeline get",
      "name": "get",
      "short": "Inspect a HubSpot pipeline and cache stages",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot pipeline get\nhubspot pipeline get p1 --view full\nhubspot pipeline list --object deal",
      "flags": [
        {
          "name": "object",
          "type": "string",
          "default": "deal",
          "usage": "Pipeline object: deal or ticket"
        }
      ]
    },
    {
      "id": "cmd-hubspot-pipeline-list",
      "path": "hubspot pipeline list",
      "name": "list",
      "short": "List HubSpot pipelines",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot pipeline get p1\nhubspot pipeline list\nhubspot pipeline list --object deal",
      "flags": [
        {
          "name": "object",
          "type": "string",
          "default": "deal",
          "usage": "Pipeline object: deal or ticket"
        }
      ]
    },
    {
      "id": "cmd-hubspot-pipeline-stage",
      "path": "hubspot pipeline stage",
      "name": "stage",
      "short": "Discover HubSpot pipeline stages",
      "long": "Discover valid stage refs for deal and ticket move commands.\n\nWorkflow:\n  inspect a pipeline with hubspot pipeline get p1, then use the stage refs with deal move or ticket move.\n\nSelectors and filters:\n  stage get accepts a stage ref such as s1, a HubSpot stage ID, or an exact stage label.\n  --pipeline accepts a pipeline ref, ID, or label. --object selects deal or ticket.\n\nOutput:\n  Human output uses stage refs s1. JSON and JSONL preserve exact HubSpot IDs.",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot pipeline stage list --object deal --pipeline p1\n  hubspot pipeline stage get s1 --object deal --pipeline p1\n  hubspot deal move d1 --stage s1",
      "flags": []
    },
    {
      "id": "cmd-hubspot-pipeline-stage-get",
      "path": "hubspot pipeline stage get",
      "name": "get",
      "short": "Inspect a HubSpot pipeline stage",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot pipeline stage get\nhubspot pipeline stage get s1 --object deal --pipeline p1",
      "flags": [
        {
          "name": "object",
          "type": "string",
          "default": "deal",
          "usage": "Pipeline object: deal or ticket"
        },
        {
          "name": "pipeline",
          "type": "string",
          "usage": "Pipeline ref, ID, or label"
        }
      ]
    },
    {
      "id": "cmd-hubspot-pipeline-stage-list",
      "path": "hubspot pipeline stage list",
      "name": "list",
      "short": "List HubSpot pipeline stages",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot pipeline stage list\nhubspot pipeline stage list --object deal --pipeline p1",
      "flags": [
        {
          "name": "object",
          "type": "string",
          "default": "deal",
          "usage": "Pipeline object: deal or ticket"
        },
        {
          "name": "pipeline",
          "type": "string",
          "usage": "Pipeline ref, ID, or label"
        }
      ]
    },
    {
      "id": "cmd-hubspot-profile",
      "path": "hubspot profile",
      "name": "profile",
      "short": "Manage provider profiles",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot profile --help",
      "flags": []
    },
    {
      "id": "cmd-hubspot-profile-create",
      "path": "hubspot profile create",
      "name": "create",
      "short": "Create an unauthenticated provider profile",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot profile create --help",
      "flags": []
    },
    {
      "id": "cmd-hubspot-profile-delete",
      "path": "hubspot profile delete",
      "name": "delete",
      "short": "Delete a local provider profile",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot profile delete --help",
      "flags": []
    },
    {
      "id": "cmd-hubspot-profile-list",
      "path": "hubspot profile list",
      "name": "list",
      "short": "List provider profiles",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot profile list --help",
      "flags": []
    },
    {
      "id": "cmd-hubspot-profile-rename",
      "path": "hubspot profile rename",
      "name": "rename",
      "short": "Rename a local provider profile",
      "long": "",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot profile rename --help",
      "flags": []
    },
    {
      "id": "cmd-hubspot-profile-use",
      "path": "hubspot profile use",
      "name": "use",
      "short": "Set the default provider profile",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot profile use --help",
      "flags": []
    },
    {
      "id": "cmd-hubspot-property",
      "path": "hubspot property",
      "name": "property",
      "short": "Discover HubSpot CRM properties",
      "long": "Discover valid HubSpot property internal names, field types, and option values.\n\nWorkflow:\n  search properties for an object, inspect a property, then use --property name=value on create, update, list, or search commands.\n\nSelectors and filters:\n  property get accepts a property ref such as pr1, an internal property name, or an exact label.\n  --object selects contact, company, deal, ticket, or note.\n\nOutput:\n  Human output uses property refs pr1 and internal names. JSON and JSONL preserve full property metadata.\n\nSafety:\n  Read-only metadata. Read-only properties are shown so agents avoid invalid update attempts.",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot property search --object contact --query lifecycle\n  hubspot property get pr1 --object contact\n  hubspot contact update ct1 --property lifecyclestage=customer",
      "flags": []
    },
    {
      "id": "cmd-hubspot-property-get",
      "path": "hubspot property get",
      "name": "get",
      "short": "Inspect a HubSpot property",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot property get\nhubspot property get pr1 --view full\nhubspot property search --object contact --query lifecycle",
      "flags": [
        {
          "name": "object",
          "type": "string",
          "default": "contact",
          "usage": "CRM object: contact, company, deal, or ticket"
        }
      ]
    },
    {
      "id": "cmd-hubspot-property-list",
      "path": "hubspot property list",
      "name": "list",
      "short": "List HubSpot properties",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot property get pr1 --object contact\nhubspot property list\nhubspot property list --object contact",
      "flags": [
        {
          "name": "object",
          "type": "string",
          "default": "contact",
          "usage": "CRM object: contact, company, deal, or ticket"
        }
      ]
    },
    {
      "id": "cmd-hubspot-property-search",
      "path": "hubspot property search",
      "name": "search",
      "short": "Search HubSpot properties",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot property get pr1 --object contact\nhubspot property search\nhubspot property search --object contact --query lifecycle",
      "flags": [
        {
          "name": "object",
          "type": "string",
          "default": "contact",
          "usage": "CRM object: contact, company, deal, or ticket"
        },
        {
          "name": "query",
          "type": "string",
          "usage": "Text to match against property label, name, or description"
        }
      ]
    },
    {
      "id": "cmd-hubspot-resolve",
      "path": "hubspot resolve",
      "name": "resolve",
      "short": "Resolve a local ref, short id, or URL alias",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot resolve --help\nhubspot resolve <ref>",
      "flags": []
    },
    {
      "id": "cmd-hubspot-schema",
      "path": "hubspot schema",
      "name": "schema",
      "short": "Emit schema hints",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot schema --help",
      "flags": [
        {
          "name": "in",
          "type": "bool",
          "usage": "Show input schema"
        },
        {
          "name": "input",
          "type": "bool",
          "usage": "Show input schema"
        },
        {
          "name": "out",
          "type": "bool",
          "usage": "Show output schema"
        }
      ]
    },
    {
      "id": "cmd-hubspot-ticket",
      "path": "hubspot ticket",
      "name": "ticket",
      "short": "Work with HubSpot ticket records",
      "long": "Work with HubSpot ticket records.\n\nActions:\n  list, search, get, create, update, move, delete, restore\n\nWorkflow:\n  search or list records, inspect the selected local ref, then run exact create, update, move, delete, or restore commands.\n\nSelectors and filters:\n  get, update, delete, and restore accept local refs like tk1, HubSpot record IDs, and exact unique values when available.\n  Useful filters include --query, --owner, --created-after, --updated-after, --archived, and --property name=value.\n  ticket records commonly use --subject as their unique selector.\n\nOutput:\n  Human output uses local refs and hides long HubSpot IDs. Use --json or --jsonl for exact IDs, URLs, properties, cursors, and associations.\n\nSafety:\n  delete requires --dry-run or --yes. Use restore for records recoverable from the HubSpot recycle bin.",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot ticket search --query cmdhub --limit 5\n  hubspot ticket get tk1 --view full\n  hubspot ticket create --subject \"Cmdhub Eval Ticket\" --priority LOW\n  hubspot ticket search --query cmdhub --limit 5\n  hubspot ticket update tk1 --priority HIGH\n  hubspot ticket move tk1 --stage s2\n  hubspot ticket delete tk1 --dry-run",
      "flags": []
    },
    {
      "id": "cmd-hubspot-ticket-create",
      "path": "hubspot ticket create",
      "name": "create",
      "short": "Create a HubSpot ticket",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot ticket create --help\nhubspot ticket create --subject \"Cmdhub Eval Ticket\" --priority LOW",
      "flags": [
        {
          "name": "company",
          "type": "string",
          "usage": "Company ref or ID to associate after create"
        },
        {
          "name": "contact",
          "type": "string",
          "usage": "Contact ref or ID to associate after create"
        },
        {
          "name": "content",
          "type": "string",
          "usage": "Ticket content"
        },
        {
          "name": "owner",
          "type": "string",
          "usage": "HubSpot owner ID or ref"
        },
        {
          "name": "pipeline",
          "type": "string",
          "usage": "Ticket pipeline ID or ref"
        },
        {
          "name": "priority",
          "type": "string",
          "usage": "Ticket priority"
        },
        {
          "name": "property",
          "type": "stringArray",
          "default": "[]",
          "usage": "Additional HubSpot property as name=value"
        },
        {
          "name": "stage",
          "type": "string",
          "usage": "Ticket stage ID or ref"
        },
        {
          "name": "subject",
          "type": "string",
          "usage": "Ticket subject"
        }
      ]
    },
    {
      "id": "cmd-hubspot-ticket-delete",
      "path": "hubspot ticket delete",
      "name": "delete",
      "short": "Delete an exact HubSpot ticket",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": true,
      "example": "hubspot ticket delete --help\nhubspot ticket delete tk1 --dry-run\nhubspot ticket delete tk1 --yes\nhubspot ticket search --query cmdhub-eval --limit 5",
      "flags": [
        {
          "name": "dry-run",
          "type": "bool",
          "usage": "Preview the exact delete without mutating HubSpot"
        },
        {
          "name": "yes",
          "type": "bool",
          "usage": "Confirm deletion of the exact displayed record"
        }
      ]
    },
    {
      "id": "cmd-hubspot-ticket-get",
      "path": "hubspot ticket get",
      "name": "get",
      "short": "Inspect a HubSpot ticket",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot ticket get\nhubspot ticket get tk1 --view full\nhubspot ticket search --query cmdhub --limit 5",
      "flags": []
    },
    {
      "id": "cmd-hubspot-ticket-list",
      "path": "hubspot ticket list",
      "name": "list",
      "short": "List HubSpot tickets",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot ticket get tk1 --view full\nhubspot ticket list\nhubspot ticket list --limit 10",
      "flags": [
        {
          "name": "archived",
          "type": "string",
          "usage": "Archived filter: true or false"
        },
        {
          "name": "company",
          "type": "string",
          "usage": "Filter by associated company ref or ID"
        },
        {
          "name": "contact",
          "type": "string",
          "usage": "Filter by associated contact ref or ID"
        },
        {
          "name": "created-after",
          "type": "string",
          "usage": "Only records created after YYYY-MM-DD or RFC3339"
        },
        {
          "name": "filter",
          "type": "stringArray",
          "default": "[]",
          "usage": "Property filter as name=value, name:OP:value, or \"name OP value\""
        },
        {
          "name": "owner",
          "type": "string",
          "usage": "HubSpot owner ID, owner ref, email, or name"
        },
        {
          "name": "pipeline",
          "type": "string",
          "usage": "Filter by ticket pipeline ID or ref"
        },
        {
          "name": "priority",
          "type": "string",
          "usage": "Filter by ticket priority"
        },
        {
          "name": "property",
          "type": "stringArray",
          "default": "[]",
          "usage": "Additional exact property filter as name=value"
        },
        {
          "name": "stage",
          "type": "string",
          "usage": "Filter by ticket stage ID, ref, or label"
        },
        {
          "name": "subject",
          "type": "string",
          "usage": "Filter by ticket subject"
        },
        {
          "name": "updated-after",
          "type": "string",
          "usage": "Only records updated after YYYY-MM-DD or RFC3339"
        }
      ]
    },
    {
      "id": "cmd-hubspot-ticket-move",
      "path": "hubspot ticket move",
      "name": "move",
      "short": "Move a HubSpot ticket to another stage",
      "long": "Move a HubSpot ticket only after validating the requested stage against HubSpot ticket pipeline metadata. Stage accepts a displayed stage ref from `hubspot pipeline get p1 --object ticket`, an exact stage ID, or an unambiguous stage label. Use --pipeline when labels are ambiguous across pipelines.",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot pipeline list --object ticket\nhubspot ticket move --help\nhubspot ticket move tk1 --stage s2",
      "flags": [
        {
          "name": "pipeline",
          "type": "string",
          "usage": "Pipeline ref or pipeline ID"
        },
        {
          "name": "stage",
          "type": "string",
          "usage": "Stage ref, stage ID, or stage label"
        }
      ]
    },
    {
      "id": "cmd-hubspot-ticket-restore",
      "path": "hubspot ticket restore",
      "name": "restore",
      "short": "Restore a HubSpot ticket from recycle bin",
      "long": "",
      "mutates": false,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot ticket restore --help\nhubspot ticket restore tk1",
      "flags": []
    },
    {
      "id": "cmd-hubspot-ticket-search",
      "path": "hubspot ticket search",
      "name": "search",
      "short": "Search HubSpot tickets",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot ticket get tk1 --view full\nhubspot ticket search\nhubspot ticket search --query cmdhub --limit 5",
      "flags": [
        {
          "name": "archived",
          "type": "string",
          "usage": "Archived filter: true or false"
        },
        {
          "name": "company",
          "type": "string",
          "usage": "Filter by associated company ref or ID"
        },
        {
          "name": "contact",
          "type": "string",
          "usage": "Filter by associated contact ref or ID"
        },
        {
          "name": "created-after",
          "type": "string",
          "usage": "Only records created after YYYY-MM-DD or RFC3339"
        },
        {
          "name": "filter",
          "type": "stringArray",
          "default": "[]",
          "usage": "Property filter as name=value, name:OP:value, or \"name OP value\""
        },
        {
          "name": "owner",
          "type": "string",
          "usage": "HubSpot owner ID, owner ref, email, or name"
        },
        {
          "name": "pipeline",
          "type": "string",
          "usage": "Filter by ticket pipeline ID or ref"
        },
        {
          "name": "priority",
          "type": "string",
          "usage": "Filter by ticket priority"
        },
        {
          "name": "property",
          "type": "stringArray",
          "default": "[]",
          "usage": "Additional exact property filter as name=value"
        },
        {
          "name": "query",
          "type": "string",
          "usage": "Text to search across HubSpot default searchable properties"
        },
        {
          "name": "sort",
          "type": "stringArray",
          "default": "[]",
          "usage": "Sort as property:asc or property:desc"
        },
        {
          "name": "stage",
          "type": "string",
          "usage": "Filter by ticket stage ID, ref, or label"
        },
        {
          "name": "subject",
          "type": "string",
          "usage": "Filter by ticket subject"
        },
        {
          "name": "updated-after",
          "type": "string",
          "usage": "Only records updated after YYYY-MM-DD or RFC3339"
        }
      ]
    },
    {
      "id": "cmd-hubspot-ticket-update",
      "path": "hubspot ticket update",
      "name": "update",
      "short": "Update an exact HubSpot ticket",
      "long": "",
      "mutates": true,
      "safe_discovery": false,
      "supports_dry_run": false,
      "example": "hubspot ticket search --query cmdhub --limit 5\nhubspot ticket update --help\nhubspot ticket update tk1 --priority HIGH",
      "flags": [
        {
          "name": "company",
          "type": "string",
          "usage": "Company ref or ID to associate after create"
        },
        {
          "name": "contact",
          "type": "string",
          "usage": "Contact ref or ID to associate after create"
        },
        {
          "name": "content",
          "type": "string",
          "usage": "Ticket content"
        },
        {
          "name": "owner",
          "type": "string",
          "usage": "HubSpot owner ID or ref"
        },
        {
          "name": "pipeline",
          "type": "string",
          "usage": "Ticket pipeline ID or ref"
        },
        {
          "name": "priority",
          "type": "string",
          "usage": "Ticket priority"
        },
        {
          "name": "property",
          "type": "stringArray",
          "default": "[]",
          "usage": "HubSpot property update as name=value"
        },
        {
          "name": "stage",
          "type": "string",
          "usage": "Ticket stage ID or ref"
        },
        {
          "name": "subject",
          "type": "string",
          "usage": "Ticket subject"
        }
      ]
    },
    {
      "id": "cmd-hubspot-version",
      "path": "hubspot version",
      "name": "version",
      "short": "Show version information",
      "long": "",
      "mutates": false,
      "safe_discovery": true,
      "supports_dry_run": false,
      "example": "hubspot version --help",
      "flags": []
    }
  ]
}
