From kaseya-autotask
Guides management of Autotask CRM entities: companies, contacts, sites/locations, and opportunities. Useful for MSP account management, client onboarding, and REST API usage.
npx claudepluginhub wyre-technology/msp-claude-plugins --plugin autotaskThis skill uses the workspace's default tool permissions.
Autotask CRM manages the core entities that define your client relationships: companies (accounts), contacts, and sites. Proper CRM data is foundational - tickets, contracts, projects, and billing all depend on accurate company and contact information.
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.
Analyzes BMad project state from catalog CSV, configs, artifacts, and query to recommend next skills or answer questions. Useful for help requests, 'what next', or starting BMad.
Autotask CRM manages the core entities that define your client relationships: companies (accounts), contacts, and sites. Proper CRM data is foundational - tickets, contracts, projects, and billing all depend on accurate company and contact information.
The primary entity representing a client organization.
| Field | Description | Required |
|---|---|---|
id | Unique identifier | System |
companyName | Official company name | Yes |
companyType | Customer, Lead, Prospect, etc. | Yes |
phone | Main phone number | No |
address1 | Street address | No |
city | City | No |
state | State/Province | No |
postalCode | ZIP/Postal code | No |
country | Country | No |
webAddress | Website URL | No |
parentCompanyID | Parent company for hierarchies | No |
ownerResourceID | Account manager | No |
classification | Classification category | No |
| ID | Type | Use Case |
|---|---|---|
| 1 | Customer | Active paying clients |
| 2 | Lead | Potential new business |
| 3 | Prospect | Qualified leads |
| 4 | Dead | Churned/lost clients |
| 5 | Vendor | Suppliers and partners |
| 6 | Partner | Strategic partners |
Individual people at a company.
| Field | Description | Required |
|---|---|---|
id | Unique identifier | System |
companyID | Associated company | Yes |
firstName | First name | Yes |
lastName | Last name | Yes |
emailAddress | Primary email | No |
phone | Direct phone | No |
mobilePhone | Mobile number | No |
title | Job title | No |
isActive | Active status | Yes |
isPrimaryContact | Primary contact flag | No |
Physical locations for a company (for on-site service).
| Field | Description | Required |
|---|---|---|
id | Unique identifier | System |
companyID | Parent company | Yes |
name | Site name | Yes |
address1 | Street address | No |
city | City | No |
isActive | Active status | Yes |
isPrimaryLocation | Primary site flag | No |
POST /v1.0/Companies
Content-Type: application/json
{
"companyName": "Acme Corporation",
"companyType": 1,
"phone": "555-123-4567",
"address1": "123 Main Street",
"city": "Springfield",
"state": "IL",
"postalCode": "62701",
"country": "United States",
"webAddress": "https://acme.example.com",
"ownerResourceID": 29744150
}
GET /v1.0/Companies/query?search={"filter":[{"field":"companyName","op":"contains","value":"acme"}]}
Search by name:
{
"filter": [
{"field": "companyName", "op": "contains", "value": "acme"}
]
}
Active customers only:
{
"filter": [
{"field": "companyType", "op": "eq", "value": 1},
{"field": "isActive", "op": "eq", "value": true}
]
}
Companies by account manager:
{
"filter": [
{"field": "ownerResourceID", "op": "eq", "value": 29744150}
]
}
PATCH /v1.0/Companies
Content-Type: application/json
{
"id": 12345,
"phone": "555-987-6543",
"webAddress": "https://newsite.acme.com"
}
POST /v1.0/Contacts
Content-Type: application/json
{
"companyID": 12345,
"firstName": "John",
"lastName": "Smith",
"emailAddress": "john.smith@acme.example.com",
"phone": "555-123-4567",
"mobilePhone": "555-987-6543",
"title": "IT Director",
"isActive": 1,
"isPrimaryContact": true
}
Contacts for a company:
{
"filter": [
{"field": "companyID", "op": "eq", "value": 12345},
{"field": "isActive", "op": "eq", "value": 1}
]
}
Search by email:
{
"filter": [
{"field": "emailAddress", "op": "eq", "value": "john.smith@acme.example.com"}
]
}
POST /v1.0/CompanyLocations
Content-Type: application/json
{
"companyID": 12345,
"name": "Main Office",
"address1": "123 Main Street",
"city": "Springfield",
"state": "IL",
"postalCode": "62701",
"country": "United States",
"isPrimaryLocation": true,
"isActive": 1
}
Create company record
Create primary contact
Create site(s)
Set up contract
Configure billing
Verify before creating
Maintain accuracy
Track relationships
For MSPs managing parent/child company relationships:
| Code | Message | Resolution |
|---|---|---|
| 400 | Duplicate company name | Check for existing company, use unique name |
| 400 | Invalid email format | Verify email address syntax |
| 404 | Company not found | Verify company ID exists |
| 409 | Contact already exists | Search for existing contact first |
"CompanyName is required" - Company name cannot be empty or null
"Invalid companyType" - Must use valid company type ID from picklist
"Email already exists" - Contact with this email already exists