workflow-automation
List, inspect, create, update, and delete HubSpot workflows (v4 flows API) from the `hubspot` agent CLI, not the `hs` developer CLI.
By hubspot · 1,342 installs
npx skills add hubspot/agent-cli-skills --skill workflow-automation
Source repository · Upstream listing
Which CLI
Two different HubSpot CLIs share a confusing resemblance — don't mix them up:
hubspot — the HubSpot agent CLI that this skill library targets. It manages CRM data and automation, and it does have native workflow commands: hubspot workflows list get create update delete .
hs — the HubSpot developer CLI ( @hubspot/cli ), for building dev projects: themes, modules, serverless functions, UI extensions, and private apps ( hs project , hs upload , hs create ). It does not create or manage workflow records.
To create or manage a workflow, use hubspot workflows ... — not hs .
If anything here ever drifts, hubspot workflows help and hs help are authoritative.
Resources
File When to use
resources/workflow json reference.md Body shape for create/update — the action graph, branching/convergence, enrollment, full PUT pitfall
resources/example contact flow.json Minimal valid CONTACT FLOW skeleton for hubspot workflows create file
resources/example branching flow.json Illustrates branch convergence — two paths pointing connection.nextActionId at one shared downstream action
Source of truth
hubspot workflows help lists five subcommands: list , get , create , update , delete . There is no search — finding by name is list jq . For JSONL piping, pagination, and destructive dry run/digest/confirm patterns, this skill builds on bulk operations/SKILL.md — re read that first.
1. List + find by name
List is paginated at 100 per call. Loop with after until meta.next is empty — see bulk operations/SKILL.md "Pagination". See resources/json patterns.md in bulk operations for more jq filters.
2. Get + read shape
Get returns the full body ( actions , enrollmentCriteria , revisionId , …) — the shape required by create/update. See resources/workflow json reference.md .
3. Create from JSON
Set type ( CONTACT FLOW or PLATFORM FLOW ), flowType ( WORKFLOW ), and objectTypeId (e.g. 0 1 for contacts) — all required on create. See resources/workflow json reference.md for the body shape and resources/example contact flow.json for the minimal template. Easiest path: get an existing similar workflow as a starting template rather than hand writing the JSON.
Pitfall: create dry run does not validate the body. It echoes the JSON back with ok:true and makes no API call — a green dry run proves only that the input is well formed JSON, not that it's a valid create (a body missing type / flowType / objectTypeId / actions still returns ok:true ). The only real validation is the live create . By contrast, update dry run does reject a body missing required fields like revisionId .
Branching and convergence. A LIST BRANCH action forks the path on filter criteria; each branch — and the defaultBranch — carries a connection to the action it continues to. Because connections target actions by nextActionId , branches can converge : point two branches at the same actionId and both paths continue to one shared action, no duplication. See the branching section of resources/workflow json reference.md and resources/example branching flow.json .
4. Update — full PUT, get modify put round trip
Update is a full replace . The body must include revisionId (from get ) and type . Read only fields ( createdAt , updatedAt , dataSources ) are stripped automatically. Update is gated: dry run first, then re run with digest <hash confirm <flowId .
Pitfall: partial bodies silently clear fields. Sending only actions will wipe enrollmentCriteria . Always start from the full get response.
5. Delete — destructive, link to bulk safety flow
The dry run output includes an apply command hint — copy the exact confirm string from there to avoid quoting surprises. Workflows cannot be restored through the automation API after deletion; check hubspot history since 1h for an audit record. The full safety pattern (digest, 5 minute expiry, history recovery) is documented in bulk operations/SKILL.md "Safe destructive workflow".
Known limitations
No hubspot workflows search — list jq is the workaround.
No Lists API in the CLI — list membership enrollment triggers must be wired up in the UI.
No sequences/cadences API. dataSources is read only — cannot be rewired via update.