Atera Tickets

SkillAI & models

Atera service desk tickets: ticket fields, statuses, priorities, comments, work hours, and billing duration.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Atera Tickets skill

What this skill tells your AI

The instructions your AI receives, as published by wyre-ai/msp-claude-plugins in msp-claude-plugins/atera/atera/skills/tickets/SKILL.md and read by ahel’s review.

Overview

Atera tickets are the core unit of service delivery in the RMM/PSA platform. Every client request, incident, and service call flows through the ticketing system. This skill covers comprehensive ticket management including creation, updates, comments, and time tracking.

Anti-triggers

  • The MSP's system-of-record helpdesk — plenty of shops run Atera for RMM and a separate PSA for service desk. If tickets live elsewhere, use connectwise-psa-tickets, autotask-tickets, halopsa-tickets, syncro-tickets, or superops-tickets; a ticket created in the wrong system is a ticket nobody is watching.
  • The alert behind the ticket — alert-to-ticket conversion rules and the alert side of that workflow are atera-alerts.

Ticket Status Values

StatusDescriptionBusiness Logic
OpenNewly created or reopened ticketDefault for new tickets
PendingAwaiting customer response or informationSLA clock may pause
ResolvedIssue has been fixedAwaiting customer confirmation
ClosedTicket is completeFinal state, no further action

Ticket Priority Levels

PriorityDescriptionTypical SLA
CriticalComplete business outage1 hour response
HighMajor productivity impact4 hour response
MediumSingle user/workaround exists8 hour response
LowMinor issue/enhancement24 hour response

Ticket Types

TypeDescription
ProblemStandard service issue
RequestService request
IncidentUnplanned interruption
ChangePlanned change

Complete Ticket Field Reference

Core Fields

FieldTypeRequiredDescription
TicketIDintSystemAuto-generated unique identifier
TicketTitlestringYesBrief issue summary
DescriptionstringNoDetailed description
TicketPrioritystringNoLow, Medium, High, Critical
TicketStatusstringNoOpen, Pending, Resolved, Closed
TicketTypestringNoProblem, Request, Incident, Change

Customer/Contact Fields

FieldTypeRequiredDescription
CustomerIDintConditionalCustomer reference (required if no EndUserID)
CustomerNamestringSystemCustomer display name
EndUserIDintConditionalContact reference
EndUserEmailstringSystemContact email address
EndUserFirstNamestringSystemContact first name
EndUserLastNamestringSystemContact last name

Assignment Fields

FieldTypeRequiredDescription
TechnicianContactIDintNoAssigned technician ID
TechnicianFullNamestringSystemTechnician display name
TechnicianEmailstringSystemTechnician email

Timeline Fields

FieldTypeRequiredDescription
TicketCreatedDatedatetimeSystemWhen ticket was created
TicketResolvedDatedatetimeSystemWhen marked resolved
FirstResponseDatedatetimeSystemFirst response timestamp
LastActivityDatedatetimeSystemLast update timestamp
DueDatedatetimeNoSLA due date

Source Fields

FieldTypeDescription
TicketSourcestringHow ticket was created (Portal, Email, Agent, API)

API Patterns

Create a Ticket

POST /api/v3/tickets
X-API-KEY: {api_key}
Content-Type: application/json
{
  "TicketTitle": "Unable to access email - multiple users affected",
  "Description": "Sales team (5 users) reporting Outlook disconnected since 9am",
  "EndUserID": 67890,
  "TicketPriority": "High",
  "TicketType": "Problem",
  "TechnicianContactID": 12345
}

Response:

{
  "ActionID": 54321,
  "TicketID": 54321,
  "TicketTitle": "Unable to access email - multiple users affected"
}

Get Ticket Details

GET /api/v3/tickets/{ticketId}
X-API-KEY: {api_key}

Response:

{
  "TicketID": 54321,
  "TicketTitle": "Unable to access email - multiple users affected",
  "TicketStatus": "Open",
  "TicketPriority": "High",
  "TicketType": "Problem",
  "CustomerID": 12345,
  "CustomerName": "Acme Corporation",
  "EndUserID": 67890,
  "EndUserFirstName": "John",
  "EndUserLastName": "Smith",
  "EndUserEmail": "john.smith@acme.com",
  "TechnicianContactID": 11111,
  "TechnicianFullName": "Jane Tech",
  "TicketCreatedDate": "2024-02-15T09:00:00Z",
  "TicketSource": "Email"
}

Update a Ticket

POST /api/v3/tickets/{ticketId}
X-API-KEY: {api_key}
Content-Type: application/json
{
  "TicketStatus": "Resolved",
  "TicketPriority": "Medium"
}

List All Tickets (Paginated)

GET /api/v3/tickets?page=1&itemsInPage=50
X-API-KEY: {api_key}

Response:

{
  "items": [...],
  "totalItems": 2847,
  "page": 1,
  "itemsInPage": 50,
  "totalPages": 57
}

Get Tickets Modified After Date

GET /api/v3/tickets/statusmodified?modifiedAfter=2024-02-01T00:00:00Z
X-API-KEY: {api_key}

Get Ticket Comments

GET /api/v3/tickets/{ticketId}/comments
X-API-KEY: {api_key}

Response:

{
  "items": [
    {
      "CommentID": 11111,
      "TicketID": 54321,
      "CommentText": "Initial triage: Checking Exchange connectivity",
      "CommentDate": "2024-02-15T09:15:00Z",
      "CreatorContactID": 12345,
      "IsInternal": true
    }
  ]
}

Create Ticket Comment

POST /api/v3/tickets/{ticketId}/comments
X-API-KEY: {api_key}
Content-Type: application/json
{
  "CommentText": "Identified root cause - Exchange certificate expired",
  "IsInternal": false
}

Get Billable Duration

GET /api/v3/tickets/{ticketId}/billableduration
X-API-KEY: {api_key}

Response:

{
  "TotalBillableDuration": 3600,
  "TotalBillableHours": 1.0
}

Get Work Hours

GET /api/v3/tickets/{ticketId}/workhours
X-API-KEY: {api_key}

Response:

{
  "items": [
    {
      "WorkHourID": 22222,
      "TicketID": 54321,
      "TechnicianContactID": 12345,
      "StartDate": "2024-02-15T09:00:00Z",
      "EndDate": "2024-02-15T10:30:00Z",
      "Duration": 5400,
      "IsBillable": true,
      "Notes": "Initial investigation and resolution"
    }
  ]
}

Common Workflows

Ticket Creation Flow

  1. Receive request - Via portal, email, phone, or API
  2. Validate customer - Ensure customer exists in system
  3. Set priority - Based on impact and urgency
  4. Assign technician - Route to appropriate team member
  5. Send acknowledgment - Notify customer of ticket creation

Ticket Resolution Flow

  1. Investigate issue - Document findings in comments
  2. Implement fix - Perform remediation steps
  3. Log time - Record billable/non-billable hours
  4. Update status - Set to Resolved
  5. Notify customer - Send resolution summary

Status Transition Validation

Open ──────────────────────────────> Closed
  │                                     ↑
  ↓                                     │
Pending ──────────────> Resolved ──────┘
  │                         ↑
  └─────────────────────────┘

Rules:

  • Cannot skip directly from Open to Closed (must resolve first)
  • Resolved tickets can be reopened to Open
  • Pending can transition to any status

Error Handling

Common API Errors

CodeMessageResolution
400Invalid ticket IDVerify ticket exists
401UnauthorizedCheck API key
403ForbiddenVerify permissions
404Ticket not foundConfirm ticket ID
429Rate limitedWait and retry (700 req/min limit)

Validation Errors

ErrorCauseFix
Title requiredMissing TicketTitleAdd title to request
Invalid priorityTypo in priority valueUse Low, Medium, High, or Critical
Customer not foundInvalid EndUserIDVerify contact exists

Best Practices

  1. Use descriptive titles - Include affected system and symptom
  2. Set accurate priority - Use impact/urgency matrix
  3. Document thoroughly - Add comments for all actions
  4. Log time promptly - Don't batch at end of day
  5. Update status regularly - Keep customers informed
  6. Use internal notes - Separate technical details from customer-facing
  7. Link related tickets - Reference previous issues

Related Skills

Signals

GitHub stars
45
Forks
24
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
atera-tickets
Source
github.com/wyre-ai/msp-claude-plugins