From atera
Manages Atera service desk tickets: create, update, search, and handle fields like statuses, priorities, types, comments, work hours, and billing durations for MSPs.
npx claudepluginhub wyre-technology/msp-claude-plugins --plugin ateraThis skill uses the workspace's default tool permissions.
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.
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Compresses source documents into lossless, LLM-optimized distillates preserving all facts and relationships. Use for 'distill documents' or 'create distillate' requests.
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.
| Status | Description | Business Logic |
|---|---|---|
| Open | Newly created or reopened ticket | Default for new tickets |
| Pending | Awaiting customer response or information | SLA clock may pause |
| Resolved | Issue has been fixed | Awaiting customer confirmation |
| Closed | Ticket is complete | Final state, no further action |
| Priority | Description | Typical SLA |
|---|---|---|
| Critical | Complete business outage | 1 hour response |
| High | Major productivity impact | 4 hour response |
| Medium | Single user/workaround exists | 8 hour response |
| Low | Minor issue/enhancement | 24 hour response |
| Type | Description |
|---|---|
| Problem | Standard service issue |
| Request | Service request |
| Incident | Unplanned interruption |
| Change | Planned change |
| Field | Type | Required | Description |
|---|---|---|---|
TicketID | int | System | Auto-generated unique identifier |
TicketTitle | string | Yes | Brief issue summary |
Description | string | No | Detailed description |
TicketPriority | string | No | Low, Medium, High, Critical |
TicketStatus | string | No | Open, Pending, Resolved, Closed |
TicketType | string | No | Problem, Request, Incident, Change |
| Field | Type | Required | Description |
|---|---|---|---|
CustomerID | int | Conditional | Customer reference (required if no EndUserID) |
CustomerName | string | System | Customer display name |
EndUserID | int | Conditional | Contact reference |
EndUserEmail | string | System | Contact email address |
EndUserFirstName | string | System | Contact first name |
EndUserLastName | string | System | Contact last name |
| Field | Type | Required | Description |
|---|---|---|---|
TechnicianContactID | int | No | Assigned technician ID |
TechnicianFullName | string | System | Technician display name |
TechnicianEmail | string | System | Technician email |
| Field | Type | Required | Description |
|---|---|---|---|
TicketCreatedDate | datetime | System | When ticket was created |
TicketResolvedDate | datetime | System | When marked resolved |
FirstResponseDate | datetime | System | First response timestamp |
LastActivityDate | datetime | System | Last update timestamp |
DueDate | datetime | No | SLA due date |
| Field | Type | Description |
|---|---|---|
TicketSource | string | How ticket was created (Portal, Email, Agent, API) |
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 /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"
}
POST /api/v3/tickets/{ticketId}
X-API-KEY: {api_key}
Content-Type: application/json
{
"TicketStatus": "Resolved",
"TicketPriority": "Medium"
}
GET /api/v3/tickets?page=1&itemsInPage=50
X-API-KEY: {api_key}
Response:
{
"items": [...],
"totalItems": 2847,
"page": 1,
"itemsInPage": 50,
"totalPages": 57
}
GET /api/v3/tickets/statusmodified?modifiedAfter=2024-02-01T00:00:00Z
X-API-KEY: {api_key}
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
}
]
}
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 /api/v3/tickets/{ticketId}/billableduration
X-API-KEY: {api_key}
Response:
{
"TotalBillableDuration": 3600,
"TotalBillableHours": 1.0
}
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"
}
]
}
Open ──────────────────────────────> Closed
│ ↑
↓ │
Pending ──────────────> Resolved ──────┘
│ ↑
└─────────────────────────┘
Rules:
| Code | Message | Resolution |
|---|---|---|
| 400 | Invalid ticket ID | Verify ticket exists |
| 401 | Unauthorized | Check API key |
| 403 | Forbidden | Verify permissions |
| 404 | Ticket not found | Confirm ticket ID |
| 429 | Rate limited | Wait and retry (700 req/min limit) |
| Error | Cause | Fix |
|---|---|---|
| Title required | Missing TicketTitle | Add title to request |
| Invalid priority | Typo in priority value | Use Low, Medium, High, or Critical |
| Customer not found | Invalid EndUserID | Verify contact exists |