From halopsa
Updates status, priority, category, team, agent, or SLA on an existing HaloPSA ticket. Requires ticket_id; accepts optional field arguments.
npx claudepluginhub wyre-technology/msp-claude-plugins --plugin halopsa# Update HaloPSA Ticket
Update fields on an existing HaloPSA ticket including status, priority, category, and assignment.
## Prerequisites
- Valid HaloPSA OAuth credentials configured
- Ticket must exist in HaloPSA
- User must have ticket edit permissions
## Steps
1. **Authenticate with OAuth 2.0**
- Obtain access token using client credentials flow
- Token endpoint: `{base_url}/auth/token?tenant={tenant}`
2. **Fetch current ticket state**
- Store current values for comparison
- Return error if ticket not found
3. **Resolve field values to IDs**
**Status looku.../update-ticketUpdates status, priority, queue, due date, or assignee on an existing Autotask ticket by ID. Validates inputs using helper tools, applies via API, and shows before/after comparison.
/update-ticketUpdates status, priority, technician, type, or impact on an existing Atera ticket. Returns updated details, change summary, and ticket link.
/update-ticketUpdates Syncro ticket fields including status, priority, problem type, assignee, and due date. Validates inputs, fetches current details, applies changes via API, and returns updated info with highlights.
/update-ticketUpdates ConnectWise PSA ticket by ID with optional status, priority, board, type, subtype, owner, or summary. Resolves names to IDs via API, applies JSON PATCH, returns updated summary.
/update-ticketUpdates status, priority, assignee, due date, or category on an existing SuperOps.ai ticket by ID or number. Validates ticket, status transitions, then returns updated details and URL.
Update fields on an existing HaloPSA ticket including status, priority, category, and assignment.
Authenticate with OAuth 2.0
{base_url}/auth/token?tenant={tenant}# Get OAuth token
TOKEN=$(curl -s -X POST "{base_url}/auth/token?tenant={tenant}" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials" \
-d "client_id={client_id}" \
-d "client_secret={client_secret}" \
-d "scope=all" | jq -r '.access_token')
Fetch current ticket state
# Get current ticket details
curl -s -X GET "{base_url}/api/Tickets/{ticket_id}" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json"
Resolve field values to IDs
Status lookup:
curl -s -X GET "{base_url}/api/Status" \
-H "Authorization: Bearer $TOKEN"
Priority lookup:
curl -s -X GET "{base_url}/api/Priority" \
-H "Authorization: Bearer $TOKEN"
Agent lookup:
curl -s -X GET "{base_url}/api/Agent?search={agent}" \
-H "Authorization: Bearer $TOKEN"
Team lookup:
curl -s -X GET "{base_url}/api/Team?search={team}" \
-H "Authorization: Bearer $TOKEN"
Build update payload
Update the ticket
# HaloPSA uses POST for updates with the id field
curl -s -X POST "{base_url}/api/Tickets" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '[
{
"id": <ticket_id>,
"status_id": <new_status_id>,
"priority_id": <new_priority_id>,
"category_1": "<category>",
"team_id": <new_team_id>,
"agent_id": <new_agent_id>,
"sla_id": <new_sla_id>
}
]'
Return update confirmation
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| ticket_id | integer | Yes | - | The HaloPSA ticket ID |
| status | string | No | - | New status name or ID |
| priority | string/int | No | - | Priority (1=Critical to 4=Low) |
| category | string | No | - | Category for classification |
| team | string | No | - | Team name to assign to |
| agent | string | No | - | Agent name or email |
| sla | string | No | - | SLA profile name |
/update-ticket 12345 --status "In Progress" --agent "john.doe@msp.com"
/update-ticket 12345 --priority "High" --team "Level 2 Support"
/update-ticket 12345 --category "Network/Firewall" --sla "Premium"
/update-ticket 12345 --status "Pending Customer"
/update-ticket 12345 --agent "jane.tech@msp.com"
/update-ticket 12345 --status "In Progress" --priority 2 --team "Network Team" --agent "jane.tech@msp.com" --category "Network/VPN"
Ticket Updated Successfully
Ticket: #12345 - Email not working
Client: Acme Corporation
Changes Applied:
┌─────────────┬───────────────────┬───────────────────┐
│ Field │ Previous │ New │
├─────────────┼───────────────────┼───────────────────┤
│ Status │ New │ In Progress │
│ Priority │ Medium (3) │ High (2) │
│ Agent │ Unassigned │ Jane Tech │
│ Team │ Service Desk │ Level 2 Support │
└─────────────┴───────────────────┴───────────────────┘
URL: https://yourcompany.halopsa.com/tickets?id=12345
No changes applied
The specified values are the same as current ticket values.
Current Ticket State:
- Status: In Progress
- Priority: High (2)
- Agent: Jane Tech
- Team: Level 2 Support
Ticket not found: #12345
Please verify the ticket ID and try again.
Use /search-tickets to find the correct ticket ID.
Status not found: "Invalid Status"
Available statuses:
- New (ID: 1)
- In Progress (ID: 2)
- Pending Customer (ID: 3)
- Resolved (ID: 4)
- Closed (ID: 5)
Use: /update-ticket 12345 --status "In Progress"
Agent not found: "unknown.user@msp.com"
Did you mean one of these?
- john.doe@msp.com (John Doe)
- jane.doe@msp.com (Jane Doe)
- james.d@msp.com (James Davis)
Team not found: "Unknown Team"
Available teams:
- Service Desk
- Level 2 Support
- Network Team
- Security Team
Use: /update-ticket 12345 --team "Service Desk"
Authentication failed
Please verify your HaloPSA credentials:
- HALOPSA_CLIENT_ID
- HALOPSA_CLIENT_SECRET
- HALOPSA_BASE_URL
- HALOPSA_TENANT (for cloud-hosted)
Ensure the API application has 'edit:tickets' permission.
Rate limited by HaloPSA API (429)
HaloPSA allows 500 requests per 3 minutes.
Retrying in 5 seconds...
Permission denied (403)
Your API credentials do not have permission to update tickets.
Contact your HaloPSA administrator to grant 'edit:tickets' scope.
Validation error from HaloPSA API (400)
Error: Cannot change status to 'Closed' - ticket has unbilled time entries.
Resolution: Bill or write off time entries before closing ticket.
Updates an existing ticket. HaloPSA uses POST for both create and update operations.
Request Body:
[
{
"id": 12345,
"status_id": 2,
"priority_id": 2,
"category_1": "Network/Firewall",
"team_id": 5,
"agent_id": 42,
"sla_id": 3
}
]
Response:
{
"id": 12345,
"summary": "Email not working",
"status_id": 2,
"status": "In Progress",
"priority_id": 2,
"priority": "High",
"agent_id": 42,
"agent": "Jane Tech",
"team_id": 5,
"team": "Level 2 Support"
}
/show-ticket - View ticket details/add-action - Add note to ticket/search-tickets - Search existing tickets/create-ticket - Create new ticket