SuperOps Tickets — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited SuperOps Tickets (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
SuperOps.ai tickets are the core unit of service delivery in the PSA. Every client request, incident, and service task flows through the ticketing system. This skill covers comprehensive ticket management including creation, updates, notes, time entries, and workflow automation using the GraphQL API.
connectwise-psa-tickets,autotask-tickets, halopsa-tickets, syncro-tickets, and atera-tickets are separate queues. Nothing here reads or writes them.
superops-alerts.superops-runbooks; a resolved ticket does not imply a fixed machine.
| Status | Description | Business Logic |
|---|---|---|
| Open | Newly created or reopened | Default for new tickets |
| In Progress | Actively being worked | Technician assigned |
| Pending | Waiting for external action | SLA clock may pause |
| Resolved | Issue addressed | Awaiting confirmation |
| Closed | Ticket complete | No further action |
| Priority | Description | Typical Response |
|---|---|---|
| Critical | Business-stopping issue | Immediate response |
| High | Major productivity impact | 1-2 hours |
| Medium | Single user/workaround exists | 4-8 hours |
| Low | Minor issue/enhancement | Next business day |
Only two fields are required on create: subject (String) and client (ClientIdentifier). The rest are optional but drive routing and reporting:
| Field | Type | Purpose |
|---|---|---|
assignee / techGroup | Identifier | Routing to a technician or queue |
requester | RequesterIdentifier | Person who reported (accepts email) |
priority | Enum | Critical, High, Medium, Low |
ticketType | Enum | Incident, Service Request, Problem, Change |
category | CategoryIdentifier | Service category |
Identifier inputs are objects, not scalars — client takes { "accountId": ... }, techGroup and category accept { "name": ... }, requester accepts { "email": ... }.
See references/fields.md for the complete field reference.
| Operation | Type | Purpose |
|---|---|---|
createTicket | mutation | Create a ticket |
getTicketList | query | List/search tickets with filter, orderBy, cursor paging |
getTicket | query | Full detail for one ticket |
updateTicket | mutation | Change status, priority, assignee, resolution |
addTicketNote | mutation | Internal (isPublic: false) or client-visible note |
addTicketTimeEntry | mutation | Log time (duration in minutes, billable flag) |
getTicketList returns a listInfo block (totalCount, hasNextPage, endCursor) for cursor pagination; first controls page size.
See references/api.md for the full operation catalog with request shapes and variable examples.
getTicketList filtered to status: ["Open"] with assignee: null,ordered by priority descending.
updateTicket (set assignee and status: "In Progress").Escalation is an updateTicket call that raises priority and reassigns techGroup to the higher tier, with an escalationReason recording why.
See references/api.md for both workflow queries.
| Error | Cause | Resolution |
|---|---|---|
| Client not found | Invalid client ID | Verify client exists |
| Invalid status transition | Workflow rule violation | Check allowed transitions |
| Required field missing | Missing subject/client | Add required fields |
| Permission denied | Insufficient access | Check user permissions |
| Rate limit exceeded | Over 800 req/min | Implement backoff |
// Validate before creating ticket
function validateTicketInput(input) {
const errors = [];
if (!input.subject || input.subject.trim().length === 0) {
errors.push('Subject is required');
}
if (!input.client?.accountId) {
errors.push('Client is required');
}
if (input.priority && !['LOW', 'MEDIUM', 'HIGH', 'CRITICAL'].includes(input.priority)) {
errors.push('Invalid priority level');
}
return errors;
}~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.