ticket-resolution
hubspot/agent-cli-skills
Create, triage, advance, and close HubSpot support tickets with pipeline discovery and bulk operations.
What is ticket-resolution?
Manage HubSpot support tickets end-to-end: discover portal-specific pipelines and stages, create and associate tickets to contacts/companies, triage by priority and assignment, bulk-advance through stages, and close with resolution tracking. Use this when you need to automate ticket lifecycle workflows or query open/unassigned tickets.
- Discover ticket pipelines and stage IDs (portal-specific, required per session)
- Create tickets with subject, content, priority, category, and pipeline placement
- Associate tickets to contacts and companies via relationships
- Search and filter tickets by stage, priority, owner, and category
- Bulk-advance tickets through pipeline stages or reassign owners
- Log resolution notes and close tickets with enumeration-based resolution values
How to install ticket-resolution
npx skills add https://github.com/hubspot/agent-cli-skills --skill ticket-resolution- HubSpot portal with support tickets enabled
- hubspot CLI installed and authenticated
- Access to bulk-operations/SKILL.md for JSONL piping and batch workflows
- Portal-specific pipeline IDs and stage IDs (discovered via CLI commands)
How to use ticket-resolution
- 1.Run `hubspot pipelines list --type tickets` and `hubspot pipelines stages --type tickets --pipeline <id>` to discover your portal's stage IDs (required every session, never hard-code)
- 2.Probe or read live tickets to discover allowed enum values for `hs_ticket_priority`, `hs_ticket_category`, and `hs_resolution` (portal-configurable, not returned by properties API)
- 3.Create tickets with `hubspot objects create --type tickets --property subject=... --property hs_pipeline=... --property hs_pipeline_stage=...`
- 4.Associate tickets to contacts/companies with `hubspot associations create --from tickets:<id> --to contacts:<id>`
- 5.Search tickets by stage, priority, or owner using `hubspot objects search --type tickets --filter ...`
- 6.Bulk-advance or reassign tickets by piping search results through `jq` to `hubspot objects update --type tickets` with `--dry-run` first
- 7.Close tickets by updating `hs_pipeline_stage` to closed stage and `hs_resolution` to an allowed enum value
Use cases
- Bulk-ingest support requests from external systems and auto-assign to pipeline stages
- Query high-priority or unassigned tickets for triage and routing
- Advance all billing-related tickets from 'New' to 'Waiting on contact' stage
- Close resolved tickets in bulk with appropriate resolution codes
- Reassign tickets across team members based on workload or expertise
- Support operations managers automating ticket intake and routing
- Customer success teams triaging and advancing ticket queues
- Developers building ticket-automation workflows into agents
- Teams integrating external support systems with HubSpot
ticket-resolution FAQ
Stage IDs are portal-specific and differ across HubSpot instances. Hard-coding them will fail in other portals. Always run `hubspot pipelines list` and `hubspot pipelines stages` at the start of a session.
The `properties get` command does not return enum options. Either probe by sending an invalid value (the 400 error lists allowed options) or read live ticket records with `hubspot objects list --type tickets --properties hs_ticket_priority,hs_ticket_category,hs_resolution`.
Yes. Reshape your data to JSONL format with `jq`, then pipe to `hubspot objects create --type tickets`. See `bulk-operations/resources/json-patterns.md` for reshape patterns.
Use `--dry-run` first to preview changes, then follow the `--digest/--confirm` flow in `bulk-operations/SKILL.md` for safe destructive workflows on >100 rows.
No. The Conversations/Inbox API is not exposed in the CLI. Only ticket object properties and associations are available.
Full instructions (SKILL.md)
Source of truth, from hubspot/agent-cli-skills.
name: ticket-resolution description: Create, triage, advance, and close HubSpot support tickets — pipeline discovery, contact/company association, priority queues, bulk stage moves, resolution close-out. triggers:
- "create ticket"
- "support ticket"
- "triage tickets"
- "open tickets"
- "resolve ticket"
- "close ticket"
- "advance ticket"
- "ticket pipeline"
- "unassigned tickets"
- "reassign ticket"
Read bulk-operations/SKILL.md first — JSONL piping, batch read, pagination, dry-run/digest/confirm, and hubspot history recovery live there. hubspot <command> --help is authoritative. Tickets use the tickets object type (plural, e.g. tickets:45123).
1. Discover pipeline + stages (portal-specific, run every session)
Stage IDs differ in every portal — never hard-code them.
hubspot pipelines list --type tickets --format table
hubspot pipelines stages --type tickets --pipeline <pipeline_id> --format table
The stage table prints each stage's ID and Label ("New", "Waiting on contact", "Closed", etc.).
2. Verify enum option values for THIS portal
hs_ticket_priority, hs_ticket_category, and hs_resolution are all enumeration properties — option values are portal-configurable and hubspot properties get does NOT return them. Discover by probing or by reading live records:
# Probe: send an invalid value; the 400 error lists the allowed options.
hubspot objects update --type tickets <some_ticket_id> --property hs_resolution=__probe__
# error: "was not one of the allowed options: [ISSUE_FIXED, FEATURE_REQUEST_TRACKED, ...]"
# Or read values already in use:
hubspot objects list --type tickets --limit 10 \
--properties hs_ticket_priority,hs_ticket_category,hs_resolution
Do NOT assume HubSpot defaults — read the portal.
3. Create a ticket and associate it
subject is the only practically-required property. Skipping hs_pipeline/hs_pipeline_stage lands the ticket in the default pipeline's first stage.
hubspot objects create --type tickets \
--property subject="Login error on mobile app" \
--property content="User reports 401 since v3.2 release." \
--property hs_pipeline=<pipeline_id> \
--property hs_pipeline_stage=<new_stage_id> \
--property hs_ticket_priority=<value_from_step_2> \
--property hs_ticket_category=<value_from_step_2>
# Capture the "id" from the output JSON.
hubspot associations create --from tickets:<ticket_id> --to contacts:<contact_id>
hubspot associations create --from tickets:<ticket_id> --to companies:<company_id>
Bulk intake from a JSONL queue (see bulk-operations/resources/json-patterns.md for reshape patterns):
cat support_requests.jsonl \
| jq -c '{properties:{subject:.subject, content:.description,
hs_pipeline:"<pipeline_id>", hs_pipeline_stage:"<new_stage_id>",
hs_ticket_priority:"<priority>", hs_ticket_category:"<category>"}}' \
| hubspot objects create --type tickets
4. Triage queries
# Open tickets by priority
hubspot objects search --type tickets \
--filter "hs_pipeline_stage=<open_stage_id> AND hs_ticket_priority=HIGH" \
--properties subject,hubspot_owner_id,createdate
# Unassigned
hubspot objects search --type tickets \
--filter "!hubspot_owner_id AND hs_pipeline_stage=<open_stage_id>" \
--properties subject,hs_ticket_priority,createdate
Filter by owner with hubspot_owner_id=<id> (find IDs via hubspot owners list --format table).
5. Advance tickets through stages (bulk update from search)
hubspot objects search --type tickets \
--filter "hs_ticket_category=BILLING_ISSUE AND hs_pipeline_stage=<new_stage_id>" \
| jq -c '{id, properties:{hs_pipeline_stage:"<waiting_stage_id>"}}' \
| hubspot objects update --type tickets --dry-run
Re-pipe the same search without --dry-run to execute. For >100 rows, follow the --digest/--confirm flow in bulk-operations/SKILL.md ("Safe destructive workflow"). Reassign in bulk works identically with {hubspot_owner_id:"<new>"}.
6. Log a resolution note
Activity creation lives in sales-execution/SKILL.md (notes/calls/meetings/tasks). After creating the note there, link it: hubspot associations create --from notes:<note_id> --to tickets:<ticket_id>.
7. Close the ticket
hs_resolution is an enumeration — pass an allowed option value from Step 2, not free text. HubSpot then computes hs_is_closed=true, closed_date, and time_to_close.
hubspot objects update --type tickets <ticket_id> \
--property hs_pipeline_stage=<closed_stage_id> \
--property hs_resolution=<allowed_resolution_value>
Known limitations
properties get/listdo not return enum options — probe via update error or read live records (CLI ask logged).- No Conversations/Inbox API surface — chat threads and inbox emails are not CLI-accessible.
Related skills
More from hubspot/agent-cli-skills and the wider catalog.

workflow-automation
Manage HubSpot v4 workflows (list, create, update, delete) via the hubspot agent CLI.

audience-targeting
Build targeted contact segments by filtering on lifecycle, engagement, job title, geography, and firmographics—then export as JSONL.

bulk-operations
Foundation patterns for bulk operations in the HubSpot CLI — JSONL piping, pagination, dry-run, and recovery.

communication-history
Retrieve CRM activity history and assemble pre-call briefs from calls, emails, notes, meetings, and tasks.

hf-cli
Hugging Face Hub CLI for managing models, datasets, spaces, buckets, and infrastructure.

huggingface-best
Find the best AI model for your task by querying HuggingFace benchmark leaderboards and filtering by device constraints.